2017-11-07 8 views
2

私はHttpSessionListenerを持っています。 web.xmlで設定さsession-timeoutセッションタイムアウトとセッションの明示的(プログラムによる)無効化を区別する

  • セッションを超過したため、セッションは、アプリケーションを呼び出すことによってプログラムで破壊された破壊された

    私のユースケースは、私はアプリケーションの数との間に(SSO)の配置シングルサインオンを持っているということで、SSOの配置に参加するアプリケーションのいずれかが明示的にログオフではなく、ときに私は、グローバルなシングルサインオンをオフにしたいですそれがセッションがタイムアウトするため、2つのケースを区別する必要があります。私は、アプリケーションが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); 
    // ... 
    
    関連する問題