【问题标题】:Spring Boot session when tab or browser closes选项卡或浏览器关闭时的 Spring Boot 会话
【发布时间】:2020-05-25 05:50:25
【问题描述】:

我有一个包含 Spring 会话管理的 Spring Boot 应用程序。但是,我注意到当我关闭一个选项卡并尝试返回该站点时,我会收到错误提示。此外,当我关闭浏览器时,它会让我再次登录,我将在我的 JDBC 中看到两个具有相同主体 ID 的会话。因此,如果我在安全配置中弄乱了一些代码,或者这是典型的行为,我会感到困惑。另外,我也放松一下,如果达到用户超时,我需要找到一种方法来立即返回登录页面。目前,如果达到用户超时,则没有任何指示。我是 Spring Boot 会话管理的新手,我已经在线阅读了一些文档,但我阅读的一些文档令人困惑。如有任何帮助,将不胜感激。

安全配置:

    @Override
      protected void configure(HttpSecurity http) throws Exception {


        http
          .authorizeRequests()        
          .anyRequest().fullyAuthenticated()
           .and()
          .formLogin()
          .successHandler(new CustomAuthenticationSuccessHandler())                 // On authentication success custom handler 
          .and()
          .logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout")).logoutSuccessUrl("/login");



        http.sessionManagement().maximumSessions(50).maxSessionsPreventsLogin(true);

    }

应用程序属性:

server.servlet.session.timeout=10m

【问题讨论】:

    标签: java spring spring-boot


    【解决方案1】:

    关闭浏览器并要求您重新登录:

    如果您有网络检查工具,您会注意到登录时有一个响应标头 - Set-Cookie: JSESSIONID=...(假设为 Tomcat)。

    此 cookie 是与您的服务中的会话相关联的 ID,将存储在浏览器的 cookie 存储中。同一域上的后续请求将自动将此 cookie 作为请求标头发送。这或多或少是您获得登录体验的方式,然后能够与您的安全页面/API 进行交互,而无需显式添加任何内容。

    如果 cookie 没有定义过期时间,浏览器会将这个 cookie 视为会话 cookie,它是暂时的,或者只会在浏览器关闭之前存在。 见https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie

    server.servlet.session.timeout=10m 定义了会话在服务器端的生存时间 (TTL)。假设用户在请求中发送了一个会话 ID,我们仍然需要检查这个会话是否有效/经过身份验证。这样做的一种方法可能是我们只检查会话是否仍然存在于 Tomcat 的内存中。在这种情况下,由于上述超时,会话可能已经被逐出。

    关于关闭选项卡并重试时的错误 - 如果您可以描述错误和/或发布堆栈跟踪,这将有助于我们提供诊断。

    【讨论】:

    • 非常感谢您回复我的问题,但是没有堆栈跟踪或错误。我真的只是想以一种方式进行指导,如果会话或在这种情况下 cookie 过期,我可以让用户自动返回登录页面。
    • 如果您想让用户自动重定向回登录页面,客户端(或浏览器)将以某种方式收到通知。假设会话已超时,您可以 1. 在用户下一个请求时将其踢出并让 302 重定向到登录,2. 运行检查会话状态的轮询请求,并在到期时让客户端路由到提供的某个链接或者 3. 做一些服务器端推送事件。
    • Spring 会话管理中的无效会话 URL 或许能帮到你 - Spring Security - Detecting TimeoutsSessionManagementConfigurer Javadoc
    猜你喜欢
    • 2010-12-27
    • 1970-01-01
    • 2013-11-03
    • 2019-05-13
    • 2016-01-06
    • 1970-01-01
    • 2014-09-04
    • 2014-08-14
    • 1970-01-01
    相关资源
    最近更新 更多