我正在开发一个使用 Spring MVC 和 Spring 安全性的 Java EE Web 应用程序。到目前为止,我成功地使用自定义 userService(它从我的数据库中检索信息)实现了常见的安全功能,但我现在面临一个新的安全问题,我真的不知道解决它的最佳方法是什么。 .
这是我需要做的:在我的应用程序中经过身份验证的用户可以浏览他们的项目,但应该只能打开他们有权访问的项目(并打开里面的内容),而不能打开其他项目。
我当前的实现处理它的导航(用户界面)只向用户提供授权项目的列表。但是,如果聪明的用户直接编辑 URL 以打开具有另一个 id 的项目,则不会对项目 id 进行授权测试,并且用户已完成,因此它可以毫无问题地打开项目。
所以,我想添加的是对打开项目或其中的某些内容的每个请求的控制。此控件将测试当前用户是否可以打开请求的项目 ID。如果没有,它将向用户返回拒绝访问页面。这个控件本身很容易实现,但由于它是一些代码,可能在我的应用程序的许多方法中,我想找到最干净的方法来做到这一点!
您认为实现它的最佳方法是什么?我考虑了几种可能性,但我需要建议:
1)使用servlet过滤器?
2) 使用自定义 authenticationManager 添加对 Spring 安全性的特殊访问?就像是 :
<security:intercept-url pattern="/open*" access="canOpen()" />
(但我不确定如何定义它以及是否能够从原始请求中获取参数......)
3)使用面向方面的编程?(但我在某处读到它不适用于控制器调用)
4) 使用 Spring 拦截器?
5)其他想法?
提前感谢您的帮助!