我正在尝试创建自己的方法安全性表达式,我想在@PreFilter
和@PostFilter
批注中使用它。
在搜索教程和类似问题时,我发现了两种继续进行的方法。
首先是扩展DefaultMethodSecurityExpressionHandler
和覆盖createSecurityExpressionRoot
,以便给出定制的SecurityExpressionRoot
。
@PreAuthorize('isOwner(#someEntity)')
第二种方法是简单地使用@Component类,并在@Pre
/ @Post
filter中使用以下方法访问其方法@bean.method()
@PreAuthorize("@mySecurityService.isOwner('#someEntityl')")
我的问题是:哪种方法更好?如果两者都可以,为什么还要选择另一种呢?
谢谢马可
@PreAuthorize('isOwner(#someEntity)')
路途优势@bean.method()
:
CustomSecurityExpressionRoot.isOwner()
那么很显然你(甚至一些新的开发人员,熟悉的Spring Security),您需要检查所有@Pre
/@Post
注解。如果你对所有JUnit测试这种优势不是那么重要@Pre
/@Post
例。@bean.method()
方法@sec.isOwner()
)SecurityExpressionRoot
你自动访问authentication
,trustResolver
,roles
,permissionEvaluator
ojects。它并不是那么重要,因为您也可以轻松地将它们放入自定义bean中。@bean.method()
路途优势@PreAuthorize('isOwner(#someEntity)')
:
我喜欢你的@bean.method()
方式 恕我直言,所有差异都不那么重要(对于我之前的项目)。但是我非常喜欢“简易设置”选项!因此,对于下一个项目,我会尝试你@bean.method()
与JUnit测试所有一起选择方式@Pre
/@Post
例。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句