Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database Spring security在数据库中保存用户登录/注销日期并处理会话超时_Database_Spring_Session_Logout - Fatal编程技术网

Database Spring security在数据库中保存用户登录/注销日期并处理会话超时

Database Spring security在数据库中保存用户登录/注销日期并处理会话超时,database,spring,session,logout,Database,Spring,Session,Logout,我需要监视用户的登录/注销。SimpleRullogoutSuccessHandler仅在用户使用注销按钮时工作,但我也需要存储会话超时注销。但是SimpleRullogoutSuccessHandler在这种情况下不起作用。从HttpSessionEventPublisher,我可以捕获会话超时,但我无法获取用户名来将注销日期存储到数据库中。有没有处理简单和会话超时注销的优雅解决方案?如果在指定时间内没有活动,我建议您使用自动注销。如果用户没有通过注销手动终止会话,则为用户存储会话过期的时间

我需要监视用户的登录/注销。SimpleRullogoutSuccessHandler仅在用户使用注销按钮时工作,但我也需要存储会话超时注销。但是SimpleRullogoutSuccessHandler在这种情况下不起作用。从HttpSessionEventPublisher,我可以捕获会话超时,但我无法获取用户名来将注销日期存储到数据库中。有没有处理简单和会话超时注销的优雅解决方案?

如果在指定时间内没有活动,我建议您使用自动注销。如果用户没有通过注销手动终止会话,则为用户存储会话过期的时间

web应用程序中的会话超时可以通过两种方式进行配置

1) 部署描述符(web.xml)中的超时 –以“分钟”为单位指定超时值,并用“会话配置”元素括起来

<web-app ...>
    <session-config>
        <session-timeout>20</session-timeout>
    </session-config>
</web-app>

上述设置仅适用于调用“setMaxInactiveInterval()方法”的会话,如果客户端在20分钟后未发出任何请求,则会话将被容器终止。

解决方案为SessionDestroyeEvent。

会话超时已设置。这不是问题。如果用户正在登录/注销,我需要存储他登录/注销的时间。在简单的登录/注销中,我可以做到这一点,但当会话过期时,我不知道如何做到这一点,因为我需要一个用户名或useId来做到这一点。如果我使用HttpSessionEventPublisher,我不能这样做,因为会话无效。我尝试了HttpSessionListener接口的implication和overide sessionDestroyed()。会话被破坏了,我无法获取会话中设置的属性,因此我无法在没有任何id或用户名的情况下将其插入到数据库中,我希望将其存储在会话中。
HttpSession session = request.getSession();
session.setMaxInactiveInterval(20*60);