Java 具有自定义会话超时的Spring安全性

Java 具有自定义会话超时的Spring安全性,java,session,spring-boot,spring-security,session-timeout,Java,Session,Spring Boot,Spring Security,Session Timeout,我需要一个从GUI设置会话超时的选项。目前,我们可以使用配置全局更改会话超时 server.session.timeout=120 server.session.cookie.max-age=120 server.session.timeout=120` 我们还可以为每个会话设置会话超时 session.setMaxInactiveInterval(120); 但找不到动态全局设置会话超时的选项。有没有办法用spring boot来实现这一点 提前感谢我认为您可能需要使用spring jdb

我需要一个从GUI设置会话超时的选项。目前,我们可以使用配置全局更改会话超时

server.session.timeout=120
server.session.cookie.max-age=120
server.session.timeout=120`
我们还可以为每个会话设置会话超时

session.setMaxInactiveInterval(120);
但找不到动态全局设置会话超时的选项。有没有办法用spring boot来实现这一点


提前感谢

我认为您可能需要使用spring jdbc会话或redis会话,这样您就可以完全控制会话存储

SpringBootJDBC会话提供了一个bean

@Autowired
JdbcOperationsSessionRepository会话存储库

使用它,我们可以从控制器设置空闲超时

只需为您的配置添加依赖项和@EnableJdbcHttpSession

但看起来会话表不是自动创建的,您需要手动创建表。您可以在中找到语句

org/springframework/session/jdbc/schema-*.sql

编辑:1

即使jdbc会话提供了一种设置全局默认超时的方法,我发现它也不能正常工作。似乎唯一的解决方案是在用户首次登录时使用以下代码设置会话超时

session.setMaxInactiveInterval(120);

实现这一目标的一种方法:

  • 保留用户的登录时间
  • 以一定的频率(比如30秒)从GUI向服务器发出ajax ping请求
  • 从会话中获取用户,并在收到ping请求时获取其会话超时时间间隔
  • 将其与当前时间进行比较,如果间隔为 超过
  • 以下代码使当前用户的http会话无效:


    您已经研究过SpringJDBC会话的示例了吗。您可以在那里配置最大空闲超时。是否有任何选项可以在spring security中创建自定义会话。?可能是这两个选项的组合:(如何设置超时)和(如何从控制器获取会话)
        public static void customLogout(HttpServletRequest request, HttpServletResponse response){
    
            CookieClearingLogoutHandler cookieClearingLogoutHandler = new CookieClearingLogoutHandler(AbstractRememberMeServices.SPRING_SECURITY_REMEMBER_ME_COOKIE_KEY);
    
            SecurityContextLogoutHandler securityContextLogoutHandler = new SecurityContextLogoutHandler();
    
            cookieClearingLogoutHandler.logout(request, response, null);
    
            securityContextLogoutHandler.logout(request, response, null);
    
        }