2011-08-30 98 views
0

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

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

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

另一种选择:

如果我可以运行一个过滤器之前的j_security_check我不能修改URL,但我可以发送重定向到用户提供了一个“合法的URL”。但是如何在j_security_check之前执行过滤器?

回答

0

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

例如:我有一个页面显示用户的公开个人资料。也许用户从我的网站注销。现在“页面”不应该“存在”。在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"; 
} 

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

+0

他们是资源:像图像,pdf等文件(是CMS)。正如我所说的,每个“资源类型”都有一个控制器。但是我们有这么多,我们试图将这个逻辑集中在一个单一的过滤器中。我知道我们可以为此添加一个“前端控制器”,其中包含一个“服务于工作人员”,但通过过滤器,我们可以在不更改任何模块(“拦截过滤器”)的情况下添加此功能。也许我们在设计中遗漏了一些东西,所以我将开始另一个线程来讨论这个问题,但即使有了架构解决方案,我也会发现有趣的知道如何使用j_security_check :-D – ggarciao

相关问题