我正在尝试创建自己的方法安全表达式,我想在其中使用@PreFilter
and @PostFilter
注释。
在搜索教程和类似问题时,我发现了两种继续进行的方法。
第一个是延长DefaultMethodSecurityExpressionHandler
并覆盖createSecurityExpressionRoot
,以便给出定制的SecurityExpressionRoot
.
@PreAuthorize('isOwner(#someEntity)')
第二种方法是简单地使用 @Component 类并在@Pre
/ @Post
过滤器访问其方法@bean.method()
@PreAuthorize("@mySecurityService.isOwner('#someEntityl')")
我的问题是:哪种方式是首选?如果两者都可以,为什么要选择另一种矿石呢?
谢谢
马可
优点@PreAuthorize('isOwner(#someEntity)')
远远超过@bean.method()
way:
- 从维护的角度来看:当您更改某些方法的签名时,例如
CustomSecurityExpressionRoot.isOwner()
那么您(甚至对于一些熟悉 Spring Security 的新开发人员)来说很清楚您需要查看所有内容@Pre
/ @Post
注释。如果您对所有内容都有 JUnit 测试,那么这个优势就不那么重要了@Pre
/ @Post
cases.
- 短语法(您可以尝试一些短别名来改进
@bean.method()
方式,例如@sec.isOwner()
)
- With
SecurityExpressionRoot
您自动有权访问authentication
, trustResolver
, roles
, permissionEvaluator
对象。这并不那么重要,因为您也可以轻松地将它们放入您的自定义 bean 中。
优点@bean.method()
远远超过@PreAuthorize('isOwner(#someEntity)')
way:
我和你一样@bean.method()
方式。恕我直言,所有差异并不那么重要(对于我之前的项目)。但我非常喜欢“简单设置”选项!所以对于下一个项目我会尝试你的@bean.method()
与所有 JUnit 测试结合的方式@Pre
/ @Post
cases.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)