如何更改j_security_check使用的原始请求页面?

时间:2011-08-30 14:35:41

标签: java security java-ee j-security-check

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

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

现在,我们如何获得基于表单的身份验证机制保留的原始请求资源?它依赖供应商?

另一种选择:

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

之前执行过滤器

2 个答案:

答案 0 :(得分:0)

如果页面是动态的并且“可能不存在”,但是链接在某个时间点可能有效,并且您的应用程序在该旧请求上barf,则应用程序中的某些内容会中断。如果“动态页面”实际上只是使用路径变量的模式匹配,那么您的代码应该响应这些情况,因为每个页面请求都应该被适当地处理。

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

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

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

答案 1 :(得分:0)

以下是您需要做的事情:

  1. 在web.xml
  2. 中为j_security_check创建过滤器
  3. 在您的过滤器中,在chain.doFilter(...)之前,更改名为 WASReqURL 的Cookie的内容,以重定向到将成功登录的servlet。