2017-11-07 12 views
2

나는 HttpSessionListener이 있습니다. 은 web.xml에 구성된 session-timeout세션 시간 초과와 세션 명시 적 (프로그래밍 방식) 무효를 구별

  • 세션을 초과했기 때문에 세션이 응용 프로그램 호출하여 프로그래밍 방식으로 파괴되었다 파괴

    내 사용 사례 나는 응용 프로그램의 수 사이 (SSO) 배열에 단일 로그인을해야한다는 것입니다 및 SSO 구성에 참여하는 응용 프로그램 중 하나가 명시 적으로 로그 오프 할 수 있지만 때 나는 글로벌 단일 로그온을 원하는 언제 세션이 시간 초과되므로 두 경우를 구별해야합니다. 응용 프로그램에서 HttpSession#invalidate을 호출하기 직전에 세션 개체에 플래그를 설정하는 방법이 있다고 생각합니다. 그런 다음 HttpSessionListener은 세션 객체를 검사하고 해당 플래그가 발견되면 프로그래밍 방식의 로그 아웃이라는 것을 알게됩니다. 그렇지 않은 경우 컨테이너 로그 아웃입니다. 그게 말이 되겠습니까? 그리고/또는 더 좋은 방법이 있습니까?

  • 답변

    2

    HttpSession#getLastAccessedTime()을 사용하면 세션과 연결된 클라이언트가 보낸 마지막 요청의 타임 스탬프를 얻을 수 있습니다. 그러면 HttpSession#getMaxInactiveInterval()과 현재 타임 스탬프의 도움으로 수학을 할 수 있습니다.

    long lastAccessedTime = session.getLastAccessedTime(); 
    long timeoutInMillis = TimeUnit.SECONDS.toMillis(session.getMaxInactiveInterval()); 
    long now = System.currentTimeMillis(); 
    
    boolean sessionHasBeenTimedout = (now - timeoutInMillis > lastAccessedTime); 
    // ...