基于表达式的访问控制

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@PostFilersec:authorize标签甚至从拦截中进行调用-url条件。

基于表达式的访问控制(EBAC)是否等效于基于角色的访问控制(RBAC)?

不,EBAC不等同于RBAC,但是RBAC内置于某些表达语言中,例如Spring EL。 例如,以下两个常用表达式使我们能够轻松实现RBAC:

  • hasRole([角色])
  • hasAnyRole([role1,role2])

但是,在编写细粒度的授权规则时,我们很容易开始编写超出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 List<contact> getAll();

5.何时使用基于表达式的访问控制(EBAC)?

如果我们需要的安全性比简单的访问控制列表(ACL)需要更多的粒度,则我们需要使用EBAC。 我们如何决定实施EBAC取决于我们拥有什么资源。 例如,在使用Spring Security的组织中,为什么不使用其Spring EL? 同样,如果我们拥有MapR,那么我们将使用其访问控制表达式。

在其他情况下,为了满足组织的需求,可能需要以偏爱的语言编写我们自己的表达语言,以实施EBAC。 我们之所以花时间来这样做,当然是为了使我们能够在所需条件下实现所需的访问控制。 一旦我们拥有足够的表达语言来完成此任务,另一个好处就是,我们不太可能依赖他人-无论是现成的商品还是开源的。

六,结论

各种软件都具有使用表达式编写授权的能力,例如MapR,Windows,当然还有Spring Security。 如果可以使用表达式来实现细粒度的访问控制,那么我将其称为-基于表达式的访问控制(EBAC),并建议您将其引用。 通过给它起一个名字,我们更有可能使用它来保护我们的系统,而不是传统的RBAC。 这样做很好,因为细粒度的访问控制(如果正确完成)更有可能防止违反行为。

翻译自: https://www.javacodegeeks.com/2019/01/expression-based-access-control.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/344558.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

excel数据命令导入mysql_如何将EXCEL数据导入MYSQL

VBA对MySql数据库进行读取和写入操作时间:2009-10-06 09:18:47来源:网络 作者:未知 点击:178次以下代码用于32位系统,Office 2003,环境,MySql版本5.1在使用前需要先安装MySql的驱动&#xff0c;进行正确配置注意&#xff1a;必须给出正确的服务器名、数据库名、表名、数据库连接…

【渝粤教育】广东开放大学 工程力学 形成性考核 (27)

选择题 题目&#xff1a;物体受平面内三个互不平行的力作用而平衡&#xff0c;三个力的作用线&#xff08;&#xff09;。 题目&#xff1a;力偶对物体的作用效应&#xff0c;决定于&#xff08;&#xff09;。 题目&#xff1a;平面平行力系的独立平衡方程数目一般有&#xff…

node mysql安装目录_nodejs 指定全局安装路径和缓存路径

1、前提&#xff1a;已安装 nodejs(nodejs官网 https://nodejs.org), 并且已将其添加到了环境变量 path 中&#xff1b;2、进入cmd命令行&#xff0c;然后输入 node -v &#xff0c;测试是否安装成功&#xff0c;出现版本号就表示安装成功3、进入cmd命令行&#xff0c;然后输入…

【渝粤教育】广东开放大学 房屋建筑学 形成性考核 (50)

选择题 题目&#xff1a;以下基础一般应用于单层厂房的基础是 题目&#xff1a;以下属于刚性防水的是 题目&#xff1a;装配整体式钢筋混凝土楼板包括 题目&#xff1a;当主梁的跨度为7m时&#xff0c;以下主梁高设计尺寸合理为 题目&#xff1a;是指为了防止建筑物构件由于气候…

【渝粤教育】广东开放大学 文化项目管理 形成性考核 (36)

选择题 题目&#xff1a; ( )是依据一定的标准和程序&#xff0c;对政策的效益、效率及价值进行判断的一种政治行为&#xff0c;目的在于取得有关这些方面的信息&#xff0c;作为决定政策变化、政策改进和制定新政策的依据 选择一项&#xff1a; 答案&#xff1a;看左侧 题目&…

mysql的sql执行原理图_性能测试MySQL之SQL运行原理

一&#xff0c;MySQL运行原理两个一样的图1&#xff0c;SQL语句执行的过程详细说明如上图所示&#xff0c;当向MySQL发送一个请求的时候&#xff0c;MySQL到底做了什么&#xff1a;a, 客户端发送一条查询给服务器。b, 服务器先检查查询缓存&#xff0c;如果命中了缓存&#xff…

穹顶灯打不出阴暗面_Java 8星期五:Java 8的阴暗面

穹顶灯打不出阴暗面在Data Geekery &#xff0c;我们喜欢Java。 而且&#xff0c;由于我们真的很喜欢jOOQ的流畅的API和查询DSL &#xff0c;我们对Java 8将为我们的生态系统带来什么感到非常兴奋。 Java 8星期五 每个星期五&#xff0c;我们都会向您展示一些不错的教程风格的…

【渝粤教育】广东开放大学 物业服务营销管理 形成性考核 (59)

选择题 题目&#xff1a; 单选 &#xff08; &#xff09;是物业服务产品的期望产品。 答案&#xff1a;看左侧 题目&#xff1a; 单选 &#xff08; &#xff09;是指模仿市场上旺销的其他物业服务企业的产品而开发的某种新产品。 答案&#xff1a;看左侧 题目&#xff1a…

【渝粤教育】广东开放大学 系统工程 形成性考核 (25)

选择题 题目&#xff1a;系统工程与系统科学的区别是&#xff0c;前者是工程技术&#xff0c;后者是基础理论。 答案&#xff1a;看左侧 题目&#xff1a;"有机论”生物学认为&#xff0c;有机体可分解为各个部分&#xff0c;各个部分的功能完全决定了系统的功能和特性。 …

Java 11:JOIN表,获取Java流

是否曾经想过如何将联接的数据库表转换为Java Stream&#xff1f; 阅读这篇简短的文章&#xff0c;并了解如何使用Speedment Stream ORM完成它。 我们将从Java 8示例开始&#xff0c;然后研究Java 11的改进。 Java 8和JOIN 速度允许将动态JOIN&#xff1a;ed数据库表作为标准J…

mysql宽字节注入_转宽字节注入详解

在mysql中&#xff0c;用于转义的函数有addslashes&#xff0c;mysql_real_escape_string&#xff0c;mysql_escape_string等&#xff0c;还有一种情况是magic_quote_gpc&#xff0c;不过高版本的PHP将去除这个特性。首先&#xff0c;宽字节注入与HTML页面编码是无关的&#xf…

【渝粤教育】电大中专中药制剂学 (2)作业 题库

1.根据药典、药品标准等将药物加工制成具有一定规格&#xff0c;可直接用于临床的药物制品&#xff0c;称为&#xff08;&#xff09;。 A.制剂 B.剂型 C.单味中药 D.中成药 E.炮制 错误 正确答案&#xff1a;左边查询 学生答案&#xff1a;D 2.药材经过炮制后可直接用于中医临…

mysql集群软件有哪些_浅谈数据库集群软件优缺点有哪些

满心狼藉回答时间&#xff1a;2019-12-05向TA提问集群(Cluster)是由两台或多台节点机(服务器)构成的一种松散耦合的计算节点集合&#xff0c;为用户提供网络服务或应用程序(包括数据库、Web服务和文件服务等)的单一客户视图&#xff0c;同时提供接近容错机的故障恢复能力。集群…

【渝粤教育】电大中专办公设备使用与维护 (2)作业 题库

1以下哪个不是现代办公硬件需求的主要依赖&#xff08;&#xff09;。 A扫描仪 B计算机 C办公桌 D打印机 错误 正确答案&#xff1a;左边查询 学生答案&#xff1a;B 2现代办公设备可分为计算机、通信&#xff08;&#xff09;三大类。 A电子工具 B办公机械 C路由器 D碎纸机 错…

input发送a.jax_JAX-RS 2.0中的透明PATCH支持

input发送a.jaxPATCH方法是最不受欢迎的HTTP方法之一&#xff0c;因为直到最近才真正没有一种标准的PATCH格式。 一段时间以来&#xff0c;它已经针对JSON进行了标准化&#xff0c;因此有很多库可以为您完成繁重的工作。 出于本博客的目的&#xff0c;我将使用json-patch&#…

python 日志函数参数_将日志信息作为参数传递给函数

我使用的Python库使用logging模块。但是&#xff0c;我创建了自己的log函数&#xff0c;脚本在内部使用。在下面是我要使用的日志记录功能&#xff1a;def log(name, content, swtch : bool None, time None):time time or datetime.now(pytz.timezone(US/Pacific))if swtch…

【渝粤教育】电大中专就业指导作业 题库

1.&#xff08; &#xff09;给中职生就业带来的机遇和挑战 A.一带一路 B.发展标准化服务业 C.“十三五”规划 正确 正确答案&#xff1a;左边查询 学生答案&#xff1a;C 2.最受企业欢迎的人才应具备&#xff08; &#xff09;素质 A.道德品质、文化认同、敬业精神、团队意识、…

python回车和换行的区别_回车与换行的解释~!

Unix/Linux和Windows回车换行Linux/Unix下的回车符与windows下的不同&#xff0c;Linux/unix下的回车符是0d,而在windows下则是0d0a&#xff0c;据说这和电脑刚开始发展时的电传打印机的速度有关。在计算机还没有出现之前&#xff0c;有一种叫电传打字机(teletype model 33)的玩…

【渝粤教育】电大中专常见病药物治疗作业 题库

1.作为退热药&#xff0c;阿司匹林的劣势是&#xff08; &#xff09;。 A.口服吸收迅速而完全 B.婴幼儿发热用阿苯片 C.儿童用药可引起Reye综合征&#xff0c;尤其是病毒性感染引起的发热 D.作用于下丘脑体温调节中枢 E.解热镇痛作用较强 错误 正确答案&#xff1a;左边查询 学…

在Spring Boot启动时运行代码

Spring Boot会自动为我们执行很多配置&#xff0c;但是迟早您将不得不做一些自定义工作。 在本文中&#xff0c;您将学习如何进入应用程序引导生命周期并在Spring Boot启动时执行代码 。 因此&#xff0c;让我们看看该框架提供了什么。 1. Bean初始化时执行方法 Spring启动您…