1

当未经身份验证的用户请求某些资源时,他将被重定向到登录页面,但j_security_check会保留原始请求的资源。如果用户登录成功,它将被重定向到该资源。

问题是有时请求的资源是动态的,所以它可能不存在。我的应用程序中有很多地方都有这种行为,因此我们不是在每个“资源处理程序”(控制器)中验证这一点,而是试图将所有这些逻辑集中在一个过滤器中,该过滤器拦截j_security_check到登录页面的转发。

现在,我们如何才能获得基于表单的身份验证机制保存的原始请求资源?它取决于供应商吗?

另一种选择:

j_security_check如果我可以在我无法修改 URL之前运行过滤器,但我可以使用“有效 URL”向用户发送重定向。但是我怎样才能在之前执行过滤器j_security_check

4

2 回答 2

0

如果页面是动态的并且“可能不存在”,但链接可能在某个时间点有效,并且您的应用程序拒绝该旧请求,那么您的应用程序中出现了问题。如果“动态页面”实际上只是使用路径变量进行模式匹配,那么您的代码应该对这些情况做出响应,因为每个页面请求都应该得到适当的处理。

示例:我有一个页面来显示用户的公开资料。也许用户从我的网站注销。现在“页面”不应该“存在”。例如,在 Spring 中,我将使用 aPathVariable并使我的处理程序响应用户的存在或不存在:

@RequestMapping(value="/display/{userkey}")
public String displayUser (@PathVariable("userkey") String userkey) {
    User user = someDAO.getUser(userkey);
    if(user != null) {
        // do something
    } else {
        // do something else
    }
    return "theView";
}

在这种情况下,我会向浏览器返回一些有意义的消息,或者重定向到另一个位置。这似乎不是安全问题,而是应用程序设计问题。

于 2011-08-30T15:15:37.293 回答
0

这是您需要做的:

  1. j_security_check在 web.xml 中创建一个过滤器
  2. 在您的过滤器中,在 之前chain.doFilter(...),更改名为WASReqURL的 cookie 的内容,以重定向到一个 servlet,该 servlet 将是成功登录后的内容。
于 2018-06-18T12:38:13.000 回答