3

当 http 会话显式无效时,将调用以下安全会话侦听器:SingleSignOnAuthenticationMechanism#SessionInvalidationListener

用户JSESSIONIDSSO在响应中获得新的 cookie。一切正常。但是当 Session 因超时而失效时,在会话侦听器中,我们不会调用使用户从 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 调用 associatedSession.invalidate(null); 和 sso.remove(关联会话);http会话超时?现在,当 http 会话到期时,用户继续使用旧的 JSESSIONIDSSO,服务器不提供更改它。

4

0 回答 0