如何使用Spring安全性获取会话超时消息

我希望在会话到期时获得会话超时消息.Below是我的spring-security.xml

       

根据我的知识,当会话到期时使用上面的代码它应该重定向到/?timeout=true OR /Timeout?timeout=true 。 退出时应该转到/ 。 但在我注销的情况下,它也会重定向到invalid-session-url所以我总是在正常注销和会话超时时都获得超时。

请帮我区分一下。

UPDATE

/logout请求包含

 session = request.getSession(); session.invalidate(); session = null; 

我解决了! 通过编写filter来取决于Spring-security。

如果有人感兴趣,可以使用以下代码: –

 import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; import java.text.MessageFormat; import javax.servlet.FilterChain; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.springframework.web.filter.OncePerRequestFilter; public class FilterToGetTimeOut extends OncePerRequestFilter { @Override public void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws IOException { try { if(request.getRequestURI().equals("/") || request.getRequestURI().equals("/Login/")){ if(request.getSession().getAttribute("login") != null && (Boolean)request.getSession().getAttribute("login") == true){ response.sendRedirect(URL); //After login page } } else if(request.getSession().getAttribute("login") == null && !request.getRequestURI().equals("/LogOut")){ response.sendRedirect(request.getContextPath()+"/?timeout=true"); //If timeout is true send session timeout error message to JSP } filterChain.doFilter(request, response); } catch (Exception e) { //Log Exception } } } 

web.xml添加此filter。

   FilterToGetTimeOut  package.FilterToGetTimeOut    FilterToGetTimeOut /*  

所以现在会话也无效,我也可以处理会话超时。

我建议你用这个注销:

 HttpSession session= request.getSession(false); SecurityContextHolder.clearContext(); if(session != null) { session.invalidate(); } for(Cookie cookie : request.getCookies()) { cookie.setMaxAge(0); } 

在您的情况下,发生的情况是当用户注销时,会话首先失效,然后会话管理将获得触发器。 当会话管理进入并发现会话已经消失时,sessionTimeout页面将被重定向。 因此,最好将logout标记的invalidate-session设置为false。

  

请在控制器中定义logout-success url的请求映射,然后从那里重定向到主页。 例如,替换您的映射如下

       

使用@RequestMapping(value =“/ logoutSucess”方法= RequestMethod.GET)在控制器中定义this / logoutSucess

我有类似的问题,比如

  1. 如果您使用某个用户登录zzzz登录
  2. 你关闭了浏览器
  3. 您再次尝试使用相同的用户zzzz登录
  4. 它无法使用消息登录以超出最大会话数

我在Spring安全文件中的代码是:

   

我通过在web.xml文件中添加会话超时条目来解决此问题。 我将会话超时值设为5分钟,构建应用程序并进行部署。 它的工作正常。

可能这会帮助某人。

谢谢,Atul