重庆做兼职哪个网站,wordpress rss采集插件,一般专业网站建设公司,wordpress文章链接设置1.概述 今天#xff0c;我们将回顾基于表达式的访问控制#xff08;EBAC#xff09;#xff0c;基于角色的访问控制#xff08;RBAC#xff09;和基于属性的访问控制#xff08;ABAC#xff09;之间的区别#xff0c;并将重点放在EBAC上。 2.什么是基于表达式的访问控… 1.概述 今天我们将回顾基于表达式的访问控制EBAC基于角色的访问控制RBAC和基于属性的访问控制ABAC之间的区别并将重点放在EBAC上。 2.什么是基于表达式的访问控制 简而言之基于表达式的访问控制是使用表达式来编写授权。 短语基于表达式的访问控制 EBAC当前最常与使用Spring Expression Language表达式来编写授权相关联。 在Spring Security 3.0中引入了使用Spring EL表达式作为授权机制的能力除了简单使用配置属性和访问决策投票者之外。 但是使用表达式的访问控制并不仅仅局限于Spring安全 这篇博客文章部分是要求更大的社区认可将授权中的表达式用作基于表达式的访问控制EBAC因为它与其他形式的访问控制有独特的不同因为它可以让您实现其他功能访问控制的形式例如RBAC和ABAC。 EBAC的其他示例包括MapR中的访问控制表达式ACE和Windows中的动态访问控制 。 也可能还有其他例如PHP Framework Symfony 。 基于表达式的访问控制EBAC是否等同于基于属性的访问控制ABAC 不可以但是ABAC可以与EBAC一起实施。 根据NIST特别出版物800-162这是ABAC的高级定义 一种访问控制方法其中根据主题的分配属性对象的分配属性环境条件以及根据这些属性和条件指定的一组策略授予或拒绝对象对对象执行操作的请求 考虑到这一点我们可以使用一种表达式语言例如基于Spring Expression Language的表达式编写自己的表达式然后可以使用现有的PreAuthorize PostAuthorize PreFilter和PostFiler secauthorize标签甚至从拦截中进行调用-url条件。 基于表达式的访问控制EBAC是否等效于基于角色的访问控制RBAC 不EBAC不等同于RBAC但是RBAC内置于某些表达语言中例如Spring EL。 例如以下两个常用表达式使我们能够轻松实现RBAC hasRole[角色] hasAnyRole[role1role2] 但是在编写细粒度的授权规则时我们很容易开始编写超出RBAC粒度级别的表达式。 3. Web安全表达式 EBAC实现例如Spring Security使我们能够保护URL。 表达式应评估为true或false定义是否授予访问权限。 在Java配置中基于userID限制RESTful应用程序中访问的示例 http
.authorizeRequests()
.antMatchers(/user/{userId}/**).access(webSecurity.checkUserId(authentication,#userId))
...4.方法安全性表达式 方法的安全性比允许或拒绝要复杂得多。 例如在Spring Security中有四个注释具有表达式属性以执行调用前和调用后的授权检查还支持过滤提交的集合参数或返回值。 最常用的PreAuthorize决定是否可以实际调用方法。 PostAuthorize 一种不常用的注释在调用方法后执行访问控制检查。 使用PostFilter Spring Security遍历返回的集合并删除提供的表达式为false的所有项目。 PreFilter允许我们在方法调用之前进行过滤但这并不常用。 下面是一个将PreAuthorize与PostFilter结合使用以实现更细粒度安全性的示例 PreAuthorize(hasRole(USER))
PostFilter(hasPermission(filterObject, read) or hasPermission(filterObject, admin))
public Listcontact getAll();5.何时使用基于表达式的访问控制EBAC 如果我们需要的安全性比简单的访问控制列表ACL需要更多的粒度则我们需要使用EBAC。 我们如何决定实施EBAC取决于我们拥有什么资源。 例如在使用Spring Security的组织中为什么不使用其Spring EL 同样如果我们拥有MapR那么我们将使用其访问控制表达式。 在其他情况下为了满足组织的需求可能需要以偏爱的语言编写我们自己的表达语言以实施EBAC。 我们之所以花时间来这样做当然是为了使我们能够在所需条件下实现所需的访问控制。 一旦我们拥有足够的表达语言来完成此任务另一个好处就是我们不太可能依赖他人-无论是现成的商品还是开源的。 六结论 各种软件都具有使用表达式编写授权的能力例如MapRWindows当然还有Spring Security。 如果可以使用表达式来实现细粒度的访问控制那么我将其称为-基于表达式的访问控制EBAC并建议您将其引用。 通过给它起一个名字我们更有可能使用它来保护我们的系统而不是传统的RBAC。 这样做很好因为细粒度的访问控制如果正确完成更有可能防止违反行为。 翻译自: https://www.javacodegeeks.com/2019/01/expression-based-access-control.html