gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:13:51 28 4
gpt4 key购买 nike

我正在尝试创建我自己的方法安全表达式,我想在 @PreFilter@PostFilter 注释中使用它。

在搜索教程和类似问题时,我发现了两种继续进行的方法。

首先是扩展 DefaultMethodSecurityExpressionHandler 并覆盖 createSecurityExpressionRoot,以提供自定义的 SecurityExpressionRoot

@PreAuthorize('isOwner(#someEntity)') 

第二种方法是简单地使用@Component 类,并在@Pre/@Post 过滤器中使用@bean.method()< 访问它的方法

@PreAuthorize("@mySecurityService.isOwner('#someEntityl')")

我的问题是:首选方式是什么?如果两者都可以,为什么要选择一个或另一个?

谢谢马可

最佳答案

@PreAuthorize('isOwner(#someEntity)') 优于 @bean.method() 方式的优点:

  • 从维护的角度来看:当您更改某些方法的签名时,例如 CustomSecurityExpressionRoot.isOwner() 那么您(甚至是一些熟悉 Spring Security 的新开发人员)很清楚您需要查看所有 @Pre/@Post 注释。如果您对所有 @Pre/@Post 案例都进行了 JUnit 测试,那么这个优势就不那么重要了。
  • 短语法(你可以尝试一些短别名来改进@bean.method()方式,例如@sec.isOwner())
  • 通过SecurityExpressionRoot,您可以自动访问authenticationtrustResolverrolespermissionEvaluator 项目。这不是很重要,因为您也可以轻松地将它们放入自定义 bean 中。

@bean.method() 优于 @PreAuthorize('isOwner(#someEntity)') 方式的优势:

  • 设置简单

我喜欢你的@bean.method() 方式。恕我直言,所有差异都不是那么重要(对于我之前的项目)。但我非常喜欢“简单设置”选项!因此,对于下一个项目,我将尝试将您的@bean.method() 方法与所有 @Pre/@Post 案例的 JUnit 测试结合起来.

关于java - 创建自定义方法安全表达式的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17803406/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com