Java 创建自定义方法安全表达式的最佳方法
我正在尝试创建自己的方法安全表达式,希望在Java 创建自定义方法安全表达式的最佳方法,java,spring,spring-security,Java,Spring,Spring Security,我正在尝试创建自己的方法安全表达式,希望在@PreFilter和@PostFilter注释中使用 在搜索教程和类似问题时,我找到了两种方法 第一个是扩展DefaultMethodSecurityExpressionHandler并重写createSecurityExpressionRoot,以便提供定制的SecurityExpressionRoot @PreAuthorize('isOwner(#someEntity)') 第二种方法是简单地使用@Component类,并在@Pre/@Pos
@PreFilter
和@PostFilter
注释中使用
在搜索教程和类似问题时,我找到了两种方法
第一个是扩展DefaultMethodSecurityExpressionHandler
并重写createSecurityExpressionRoot
,以便提供定制的SecurityExpressionRoot
@PreAuthorize('isOwner(#someEntity)')
第二种方法是简单地使用@Component类,并在@Pre
/@Post
过滤器中使用@bean.method()
我的问题是:哪种方式更可取?如果两者都可以,为什么选择一个或另一个呢
多谢各位
Marco预授权('isOwner(#someEntity')的优点远远超过
@bean.method()
方式:
- 从维护的角度来看:当您更改某些方法(如
)的签名时,您(甚至对于一些熟悉Spring安全性的新开发人员)显然需要查看所有CustomSecurityExpressionRoot.isOwner()
/@Pre
注释。如果您对所有@Post
/@Pre
案例都进行JUnit测试,那么这一优势就不那么重要了@Post
- 短语法(您可以尝试一些短别名来改进
方式,例如@bean.method()
)@sec.isOwner()
- 使用
您可以自动访问SecurityExpressionRoot
,身份验证
,信任解析程序
,角色
项目。这并不重要,因为您也可以在自定义bean中轻松获得它们权限评估器
@bean.method()
优于@PreAuthorize('isOwner(#someEntity'))
方式:
- 简易安装
@bean.method()
方式。IMHO所有的差异都不是那么重要(对于我以前的项目)。但我非常喜欢“轻松设置”选项!因此,对于下一个项目,我将尝试您的@bean.method()
方法,并结合JUnit测试对所有@Pre
/@Post
案例进行测试
@PreAuthorize("@mySecurityService.isOwner('#someEntityl')")