http セッションが明示的に無効化されると、次のセキュリティ セッション リスナーが呼び出されます。SingleSignOnAuthenticationMechanism#SessionInvalidationListener
ユーザーは応答で新しいJSESSIONIDSSO
Cookie を取得します。すべて正常に動作します。ただし、セッションがタイムアウトによって無効化された場合、セッション リスナーでは、ユーザーを 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 を使用し、サーバーはそれを変更することを提案しません。