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

问题描述:

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

两件事情

  1. 在web.xml
  2. 配置一个欢迎页面,登录页面创建一个过滤器,在web.xml配置,这应该是第一个在web.xml
  3. 在过滤器检查过滤器,如果会话是新的用户应被引导到登录页面,否则应该将请求处理。
+0

您好abhi,我的问题是它重定向登录页面,但登录页面显示在相同的jsp rquested ajax DIV标签。 – 2012-04-24 08:45:17

+0

嗨哈里,当你击中任何jsp/servlet时,在那里使用重定向,试一下如果可行的话! – abhi 2012-04-24 10:52:05

每一次新的请求到来时,你应该检查,并在服务器端验证会话。 此超时由Web服务器处理。一旦发生超时,服务器自动将用户重定向到session logout URL。您可以在服务器的conf文件中更改此配置。

欲了解更多信息请参阅this

+0

喜。实际上在web.xml中,我将会话超时设置为5分钟,当用户以语法方式登录时,我将会话超时更改为9分钟。我的问题是,当会话过期时,我可以重定向到登录页面。但它是jsp中的ajax请求,所以登录页面在同一个jsp的side div标记中呈现。 – 2012-04-24 06:55:45

最近我做了一个关于本教程完全相同。也许它可能会有所帮助。与abhi提出的解决方案是一样的,但有一个例子。

http://classfoundexception.blogspot.com.es/2012/04/how-to-secure-struts-13-application.html

为了处理会话超时/过期的AJAX调用请求,并派遣其到登录页面的步骤如下。

1)在你的JSP无论AJAX功能都写你的Ajax发送请求之前,设置一个头。

req.open("POST", Servlet_PATH, true); 
req.setRequestHeader("X-Requested-With", "XMLHttpRequest"); //set header 
req.send(); 

2)在过滤器中获得的标题像这样,如果会话是空发送作为响应错误

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和请求。国家这样

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"; 
     }