2012-06-22 3 views
2

GWT에서 작업 중입니다. 내 응용 프로그램에서는 아무 것도 수행되지 않을 때 (마우스 이벤트 포함) 2 분 후에 세션 시간 초과를 추가하려고합니다.GWT에서 세션 시간 초과에 대한 마우스 동작

GWT 세션 개체를 사용하는 클래스를 작성했습니다.

public static boolean ValidSession(HttpSession session) { 

     boolean aResult = true; 

     logger.debug("Start of ValidSession"); 
     try 
     { 
      if(session!=null) 
      { 
       String strUserInf=""; 
       strUserInf=(String)session.getAttribute("userInf"); 
       logger.debug("User Inf in session is: " + strUserInf); 
       if(strUserInf==null || strUserInf.trim().equals("")) 
       { 
        logger.debug("User Info blank"); 
        aResult =false; 
       } 

      } 
      else 
      { 
       logger.debug("SessionNull"); 
       aResult=false; 
      } 
     } 
     catch (Exception e) 
     { 
      logger.error("Exception in ValidSession: ", e); 
      aResult = false;       
     } 
     logger.debug("End of isSessionValid"); 
     return aResult; 
    } 

    public static void TimeUpdate(HttpSession session){ 
     session.setAttribute("lastAccessed", String.valueOf(session.getLastAccessed())); 
     System.out.println("lastAccessed "+ session.getAttribute("lastAccessed")); 
     } 

그러나 RPC 호출시에만 타이머를 다시 설정합니다. 마우스 움직임도 감지하고 싶습니다.

누구든지 해결책을 제안 할 수 있습니까? 미리 감사드립니다.

+0

이 기능을 구현하려면 NativePreviewHandler를 사용하는 것이 좋습니다. 다음 링크를 참조하십시오. http : //google-web-toolkit.googlecode.com/svn/javadoc/1.6/com/google/gwt/user/client/Event.NativePreviewHandler.html – iMBMT

+0

이 목표를 달성하기 위해 무엇을 시도 했습니까? –

답변

4

모듈로드시 다음과 같은 코드를 작성할 수 있습니다.

private static Timer SESSION_TIMER = new Timer() { 
      public void run() { 
       SessionFactory.putValue(SesisonKey.SESSION_EXPIRED, 
         true); 
      } 
     }; 

호출이 방법을 사용하여 모듈로드에 아래에있는 타이머 세션을 갱신이 방법 :

public static void renewTimer() { 
      if (CLIENT_SIDE_TIMER != null) { 
       CLIENT_SIDE_TIMER.cancel(); 
       SessionFactory.getClientInstance().put(
         SesisonKey.SESSION_EXPIRED, false); 
       //CLIENT_SIDE_TIMER.schedule(250 * 60 * 20); 
       //1 Minute = 60000 Milliseconds 
       CLIENT_SIDE_TIMER.schedule(60000 * 2); 
      } 
     } 

한 매 2 분 실행 타이머 설정 세션을 만들기 flage 만료

NativePreviewHandler 핸들러가 마우스 이벤트를 잡아서 세션이 만료되었거나 플래그가 없는지 확인합니다.

final NativePreviewHandler nativeHandler = new NativePreviewHandler() { 
        @Override 
        public void onPreviewNativeEvent(NativePreviewEvent event) { 

        preventBack(); 

         if (SessionFactory 
           .getValue(SesisonKey.CLIENT_SESSION_EXPIRED) != null) { 
          boolean expire = (Boolean) SessionFactory 
            .getValue(SesisonKey.CLIENT_SESSION_EXPIRED); 
          if (expire) { 
           boolean show= false; 
           //logout session code 
           ClientSideTimers.renewSessionTimer(); 
          } 
         } 
        } 
       }; 
       Event.addNativePreviewHandler(nativeHandler); 

경우는 타이머를 통해 잘못된 세션 변수 값을 만료 설정 값이 false 인 경우 다음 로그 아웃을 할 것보다 이분에 대한 안정적인 화면.

SESSION_EXPIRED는 세션 만료 검사를위한 상수 변수이며 그 SessionFactory는 사용자 정의 공장 코드입니다. U는 단지 내 프로젝트 패턴을 사용하는 변수를 무시합니다. 그냥 상수를 상수로 설정해야합니다. 아직도 어떤 질문이라도 알려주세요.

관련 문제