创建自定义方法安全表达式的最佳方法

2023-11-23

我正在尝试创建自己的方法安全表达式,我想在其中使用@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(使用前将#替换为@)

创建自定义方法安全表达式的最佳方法 的相关文章

随机推荐