当未经身份验证的用户请求某些资源时,他将被重定向到登录页面,但j_security_check
将保留原始请求的资源。如果用户成功登录,则会将其重定向到该资源。
问题是有时请求的资源是动态的,因此它可能不存在。我的应用程序中有很多地方有这种行为,所以我们不是在每个“资源处理程序”(控制器)中验证这一点,而是试图将所有这些逻辑集中在一个过滤器中,该过滤器拦截j_security_check
前进到登录页面。
现在,我们如何获得基于表单的身份验证机制保留的原始请求资源?它依赖供应商?
另一种选择:
如果我可以在j_security_check
之前运行过滤器,我无法修改URL,但我可以使用“有效URL”向用户发送重定向。但是如何在j_security_check
?
答案 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)
以下是您需要做的事情:
j_security_check
创建过滤器
chain.doFilter(...)
之前,更改名为 WASReqURL 的Cookie的内容,以重定向到将成功登录的servlet。