您好我正在使用struts和jsp开发应用程序。在jsp中我们使用Ajax调用,在会话超时后,我们将重定向到登录页面。但问题是登录页面显示相同的div标签。我在会话中检查用户是否在jsp的javascript中但是会话总是会有userid值,如果会话也到期,它永远不会为null。
答案 0 :(得分:3)
两件事
答案 1 :(得分:1)
最近我做了一个关于这个的教程。也许它会有所帮助。与abhi提出的解决方案相同,但有一个例子。
http://classfoundexception.blogspot.com.es/2012/04/how-to-secure-struts-13-application.html
答案 2 :(得分:0)
每次新请求到来时,您都应该检查并验证服务器端的会话。
此超时也由Web服务器处理。一旦发生超时,服务器会自动将用户重定向到session logout URL
。您可以在服务器的conf文件中更改此配置。
有关详细信息,请参阅this
答案 3 :(得分:0)
要处理Ajax呼叫请求的会话超时/过期并将其分发到登录页面,请执行以下步骤。
1)在你的jsp中写入ajax函数的地方在你的ajax发送请求之前设置一个标题。
req.open("POST", Servlet_PATH, true);
req.setRequestHeader("X-Requested-With", "XMLHttpRequest"); //set header
req.send();
2)在Filter中获取这样的头部,如果session为null,则发送为响应错误
httpRequest.getHeader("X-Requested-With");
if (session == null) {
`if(httpRequest.getHeader("X-Requested-With")!=null && httpRequest.getHeader("X-Requested-With").equals("XMLHttpRequest")){`
`logger.info("Ajax Expired...");`
`((HttpServletResponse)response).sendError(403);` // Response error set
`return;`
`}}`
3)在jsp中,在编写ajax代码时,请检查request.readystate和request.state,如下所示
if (req.readyState==4 && req.status==200)
{
//your logic
}
else if(req.readyState==4 && req.status==403){
alert("Your Session is Expired.Please Relogin.");
window.location.href = "<%=request.getContextPath()%>/jsp/login.jsp";
}