ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-05-29 10:50:53  阅读:268  来源: 互联网

标签:java spring spring-security


我正在尝试创建自己的方法安全表达式,我想在@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,您可以自动访问身份验证,trustResolver,roles,permissionEvaluator对象.它不是那么重要,因为你也可以轻松地将它们放入你的自定义bean中.

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

>易于安装

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

标签:java,spring,spring-security
来源: https://codeday.me/bug/20190529/1177444.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有