0

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

4

4 回答 4

3

两件事情

  1. 在 web.xml 中配置欢迎页面作为登录页面
  2. 创建一个过滤器并在 web.xml 中配置,这应该是 web.xml 中的第一个过滤器
  3. 在过滤器中检查会话是否是新的,用户应该被引导到登录页面,否则应该处理请求。
于 2012-04-24T07:12:10.577 回答
1

最近我正好做了一个关于这个的教程。也许它会有所帮助。与 abhi 提出的解决方案相同,但有一个示例。

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

于 2012-04-24T08:49:07.240 回答
0

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

有关更多信息,请参阅

于 2012-04-24T06:37:16.430 回答
0

要处理 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和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";
         }
于 2013-12-11T05:09:08.550 回答