3

http セッションが明示的に無効化されると、次のセキュリティ セッション リスナーが呼び出されます。SingleSignOnAuthenticationMechanism#SessionInvalidationListener

ユーザーは応答で新しいJSESSIONIDSSOCookie を取得します。すべて正常に動作します。ただし、セッションがタイムアウトによって無効化された場合、セッション リスナーでは、ユーザーを SSO からログアウトさせるコードを呼び出しません。

        @Override
        public void sessionDestroyed(Session session, HttpServerExchange exchange, SessionDestroyedReason reason) {
            String ssoId = (String) session.getAttribute(SSO_SESSION_ATTRIBUTE);
            if (ssoId != null) {
                try (SingleSignOn sso = manager.findSingleSignOn(ssoId)) {
                    if (sso != null) {
                        sso.remove(session);
                        if (reason == SessionDestroyedReason.INVALIDATED) {
                            for (Session associatedSession : sso) {
                                associatedSession.invalidate(null);
                                sso.remove(associatedSession);
                            }
                        }
                        // If there are no more associated sessions, remove the SSO altogether
                        if (!sso.iterator().hasNext()) {
                            manager.removeSingleSignOn(ssoId);
                        }
                    }
                }
            }
        }

問題は、なぜこのように機能するのかということです。undertow invoke associatedSession.invalidate(null); を強制できますか? および sso.remove(associatedSession); httpセッションのタイムアウトについて? http セッションが期限切れになると、ユーザーは引き続き古い JSESSIONIDSSO を使用し、サーバーはそれを変更することを提案しません。

4

0 に答える 0