如何在jsp会话超时后重定向到登录页面?

时间:2012-04-24 06:26:03

标签: java ajax jsp struts

您好我正在使用struts和jsp开发应用程序。在jsp中我们使用Ajax调用,在会话超时后,我们将重定向到登录页面。但问题是登录页面显示相同的div标签。我在会话中检查用户是否在jsp的javascript中但是会话总是会有userid值,如果会话也到期,它永远不会为null。

4 个答案:

答案 0 :(得分:3)

两件事

  1. 在web.xml
  2. 中将欢迎页面配置为登录页面
  3. 创建过滤器并在web.xml中配置,这应该是web.xml中的第一个过滤器
  4. 在过滤器中检查会话是否是新的,应该引导用户进入登录页面,否则应该处理请求。

答案 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";
         }
相关问题