如何使用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
我有类似的问题,比如
- 如果您使用某个用户登录zzzz登录
- 你关闭了浏览器
- 您再次尝试使用相同的用户zzzz登录
- 它无法使用消息登录以超出最大会话数
我在Spring安全文件中的代码是:
我通过在web.xml文件中添加会话超时条目来解决此问题。 我将会话超时值设为5分钟,构建应用程序并进行部署。 它的工作正常。
可能这会帮助某人。
谢谢,Atul