gip*_*ani 6 java spring spring-security
我正在尝试创建自己的方法安全表达式,我想在其中使用@PreFilter和@PostFilter注释.
在搜索教程和类似问题时,我发现了两种方法.
第一种是扩展DefaultMethodSecurityExpressionHandler和覆盖createSecurityExpressionRoot,以便进行定制SecurityExpressionRoot.
@PreAuthorize('isOwner(#someEntity)')
Run Code Online (Sandbox Code Playgroud)
第二种方法是简单地使用@Component类和@Pre/ @Postfilter访问其方法@bean.method()
@PreAuthorize("@mySecurityService.isOwner('#someEntityl')")
Run Code Online (Sandbox Code Playgroud)
我的问题是:哪种方式首选?如果两者都可以,为什么选择另一个?
谢谢Marco
的优势@PreAuthorize('isOwner(#someEntity)')大大超过@bean.method()方式:
CustomSecurityExpressionRoot.isOwner()很清楚(甚至对于熟悉Spring Security的新开发人员)您需要查看所有@Pre/ @Post注释.如果您对所有@Pre/ @Post案例进行JUnit测试,则此优势并不那么重要.@bean.method()方法@sec.isOwner())SecurityExpressionRoot你自动访问authentication,trustResolver,roles,permissionEvaluatorojects.它不是那么重要,因为你也可以轻松地将它们放入你的自定义bean中.的优势@bean.method()大大超过@PreAuthorize('isOwner(#someEntity)')方式:
我喜欢你的@bean.method()方式.恕我直言,所有差异都不那么重要(对于我以前的项目).但我非常喜欢"简易设置"选项!因此,对于下一个项目,我将尝试@bean.method()与所有@Pre/ @Post案例的JUnit测试相结合.
| 归档时间: |
|
| 查看次数: |
2676 次 |
| 最近记录: |