登录会话超时
Posted
技术标签:
【中文标题】登录会话超时【英文标题】:Login session timeout 【发布时间】:2017-04-04 23:24:30 【问题描述】:我想为登录会话设置 x 分钟的超时时间。
我创建了一个SessionListener
:
public class SessionListener implements HttpSessionListener
@Override
public void sessionCreated(HttpSessionEvent event)
event.getSession().setMaxInactiveInterval(60 *15);
@Override
public void sessionDestroyed(HttpSessionEvent event)
它会创建超时 15 分钟的会话,但我想在用户登录后设置此超时。否则,如果您在登录页面等待超过 15 分钟并尝试登录,则会话已被破坏,您将无法登录(并启动 AccessDeniedHandler 类)。
【问题讨论】:
【参考方案1】:最后我有一个解决方案。即使用户未通过身份验证,Spring 也会创建会话的主要原因是为了 csrf 令牌,因此一旦打开页面,Spring 就会创建会话。我所做的是在创建会话时设置会话没有超时。
public class SessionListener implements HttpSessionListener
@Override
public void sessionCreated(HttpSessionEvent event)
event.getSession().setMaxInactiveInterval(0);
@Override
public void sessionDestroyed(HttpSessionEvent event)
然后,一旦用户通过身份验证(使用登录页面),我将超时设置为当前会话:
public class LoginSuccessHandler extends SimpleUrlAuthenticationSuccessHandler
@Autowired
private RedirectStrategy redirectStrategy;
@Override
protected void handle(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException
// Set session timeout when user is authenticated
request.getSession().setMaxInactiveInterval(5);
redirectStrategy.sendRedirect(request, response, targetUrl);
通过这种方式,用户可以在登录页面停留多久,并且会话永远不会被破坏。
【讨论】:
谢谢,这个解决方案也解决了我的问题,不确定这是否是处理这个问题的最佳方法,但它有效。在 SessionListener 里面我放了一个无限时间的负值:setMaxInactiveInterval(-1)以上是关于登录会话超时的主要内容,如果未能解决你的问题,请参考以下文章