idea资源包下创建资源包_根据谁创建资源授权资源

idea资源包下创建资源包

我的一位同事向我提出了一个关于StackOverflow的有趣问题,并由于我在Spring方面的经验,建议我回答一个很好的问题。

问题是,“ 如何基于使用批注在REST中创建资源的用户来授权特定资源 。”

要点是:

我正在尝试做的是创建一个名为@Authorize的注释,并将其用于需要用户授权才能执行某些操作的用户(此时用户已通过身份验证)。 例如。 我有一个带有getOrder()方法的订单服务。 我只希望创建此订单的用户访问它。

我对StackOverflow的回答

为了对Java中的方法实施授权控制,我强烈建议使用具有Spring Security API 的可扩展访问控制标记语言(XACML)实现的Spring Security。

Spring安全

Spring Security提供了两种主要方法来保护对方法的访问:

  • 预授权 :这允许在允许执行该方法之前检查某些条件/约束。 无法验证这些条件将导致无法调用该方法。
  • 后授权 :允许在方法返回后检查某些条件/约束。 与预授权检查相比,此方法使用较少,但可用于在复杂的互连业务层方法周围提供额外的安全性,尤其是在与该方法返回的对象相关的约束周围。

举例来说,访问控制规则之一是用户在能够调用方法getEvents()之前具有ROLE_ADMIN权限。 在Spring Security框架内完成此操作的方法是使用PreAuthorize批注,如下所示:

public interface Sample { ... 
@PostAuthorize("hasRole('ROLE_ADMIN')") 
Event getEvent(); }

本质上,Spring Security使用运行时面向方面的编程(AOP)切入点在对该方法提出建议之前执行,并在ossaccess.AccessDeniedException指定的安全性约束的情况下抛出ossaccess.AccessDeniedException

在本文档的第27.3节中可以找到有关Spring Security的方法级别安全性的更多信息 。

可扩展访问控制标记语言(XACML)– ABAC的策略语言

Spring Security通过基于表达式的访问控制在实现访问控制方面做得很出色,但是基于属性的访问控制(ABAC)允许对访问进行更细粒度的控制,这是美国国家标准技术研究院的推荐。

为了解决基于角色的访问控制(RBAC)的局限性,NIST提出了一种称为ABAC(基于属性的访问控制)的新模型。 在ABAC中,您现在可以使用更多的元数据/参数。 例如,您可以考虑:

  • 用户的身份,角色,职务,位置,部门,出生日期…
  • 资源的类型,位置,所有者,价值,部门...
  • 上下文信息,例如用户在资源上尝试执行的操作的时间

所有这些都称为属性。 属性是ABAC的基础,因此是名称。 您可以将这些属性组合到策略中。 政策有点像ABAC的秘密武器。 策略可以授予和拒绝访问。 例如:

  • 如果员工和记录位于同一区域,则员工可以查看记录
  • 在下午5点至早上8点之间拒绝访问阅读记录。

策略可用于表达高级方案,例如

  • 职责分工
  • 基于时间的约束(请参见上文)
  • 基于关系的访问控制(请参见上文)
  • 委派规则委派Bob访问Alice的文档。

有两种主要语法可用于编写策略:

  • 基于XACML的缩写授权语言(ALFA)
  • 可扩展访问控制标记语言(XACML)

ABAC还带有一个体系结构,用于定义如何评估和执行策略。

XACML

该体系结构包含以下组件:

  • 策略执行点(PEP):这是保护您要保护的API /应用程序的组件。 PEP拦截流,对其进行分析,然后向PDP发送授权请求(请参见下文)。 然后,它会收到执行的决定(许可/拒绝)。
  • 策略决策点(PDP)会收到授权请求(例如Alice可以查看记录123吗?),并根据已配置的策略集对其进行评估。 最终,它会做出决定,并将其发送回PEP。 在评估过程中,PDP可能需要其他元数据,例如用户的职务。 为此,它可以求助于策略信息点(PIP)
  • 策略信息点(PIP)是PDP与基础数据源(例如LDAP,数据库,REST服务)之间的接口,其中包含有关用户,资源或其他方面的元数据。 您可以使用PIP检索PDP在运行时可能需要的信息,例如风险评分,记录的位置或其他。

XACML的实现

全面披露–我在XACML技术委员会工作,并为Axiomatics工作, Axiomatics是实施XACML的动态授权的提供者。

Axiomatics为他们的Axiomatics Policy Server提供了一个Spring Security SDK,它提供了四个表达式,可用于查询PDP,作为保护方法调用的一部分

  1. xacmlDecisionPreAuthz,使用@PreAuthorize
  2. xacmlDecisionPostAuthz,使用@PostAuthorize
  3. xacmlDecisionPreFilter,使用@PostFilter
  4. xacmlDecisionPostFilter,使用@PreFilter

这些方法的确切签名如下:

  1. xacmlDecisionPreAuthz(Collection<String> attributeCats,
    Collection<String> attributeTypes, Collection<String> attributeIds,
    ArrayList<Object> attributeValues)
  2. xacmlDecisionPostAuthz(Collection<String> attributeCats,
    Collection<String> attributeTypes, Collection<String> attributeIds,
    ArrayList<Object> attributeValues)
  3. xacmlDecisionPreFilter(Collection<String> attributeCats, Collection<String>
    attributeTypes, Collection<String> attributeIds, ArrayList<Object>
    attributeValues)
  4. xacmlDecisionPostFilter (Collection<String>
    attributeCats, Collection<String> attributeTypes, Collection<String>
    attributeIds, ArrayList<Object> attributeValues)

有关XACML实现的完整列表,可以在Wikipedia上查看此列表 。

翻译自: https://www.javacodegeeks.com/2018/07/authorizing-resources-created.html

idea资源包下创建资源包

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

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

相关文章

如何卸载linux中的docker,linux centos7 安装、卸载docker

docker安装1&#xff1a;查看系统版本cat /etc/redhat-releaseCentOS Linux release 7.4.1708 (Core)2:安装docker(yum方式)$ yum install docker3&#xff1a;查看是否安装成功$docker version若输出以下&#xff0c;说明安装成功Client:Version: 1.12.6API version: …

html页面中Location对象跳转页面用法

姓名&#xff1a;<input name"name"/></br> 薪水&#xff1a;<input name"salary"/></br> 年龄&#xff1a;<input name"age"/></br> <input type"submit" value"确认"/></br…

java orm框架有哪些_Java Stream ORM现在带有JOIN

java orm框架有哪些Speedment是一个Java Stream ORM工具包和运行时&#xff0c;它使您可以将数据库表作为标准Java Streams查看。 由于不必混合使用Java和SQL&#xff0c;因此该应用程序变得更加紧凑&#xff0c;从而使其开发速度更快&#xff0c;更不容易出错并且易于维护。 流…

linux pdb创建表空间,ORACLE12C PDB创建默认表空间和用户语句(示例代码)

第一次接触到12C CDB和PDB数据库&#xff0c;且客户提供的是ORACLE一体机&#xff0c;只有访问权&#xff0c;费劲周折&#xff0c;今记录12C创建默认路径表空间语句和用户--创建默认表空间&#xff1a;create tablespace tablesapce_name datafile size 500M autoextend on …

用户在页面输入的中文数据,servlet如何获得正确的中文值

public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 告诉浏览器&#xff0c;返回的是html页面&#xff0c;而且是以utf-8编码的response.setContentType("text/html;charsetutf-8");//reques…

java编写排序的代码_在Java 8之前,您编写了几行代码来对对象集合进行排序?...

java编写排序的代码在Java 8之前&#xff0c;您编写了几行代码来对对象集合进行排序&#xff1f; Java 8您需要多少个&#xff1f; 您可以在Java 8中用一行完成。 让我们看看下面的Employee类。 public class Employee {private String name;private Integer age;public Emp…

java全局变量和局部变量_Java 10 –局部变量类型推断

java全局变量和局部变量在本文中&#xff0c;我们将看到作为JEP 286的一部分提出的名为Local Variable Type Inference的Java10功能。 从Java的第一个版本开始&#xff0c;它是一种强类型化的语言&#xff0c;我们需要提及每种变量数据类型。 我们都感到Java是冗长的语言&#…

JS_Java_Oracle_MySQL截取字符串的函数

JS 截取字符串 函数 substring(indexStart, indexEnd)&#xff1a; function f1() {var s abcd;// 字符串的字符下标从0开始&#xff0c;从下标为2的字符c开始截取&#xff0c;截取到下标为3的字符d为止&#xff0c;含头不含尾&#xff0c;所以字符d没有被截取&#xff0c;最…

linux安装meld rpm,Linux meld安装

meld是一款图形化的文本比较工具&#xff0c;该工具在windows与linux平台下均有对应版本&#xff0c;最新版本为3.14.2&#xff0c;附上下载地址http://meldmerge.org/meldmeld相较diff命令其输出结果更加直观&#xff0c;因此在linux下使用该工具进行程序源码的比较。忘了说了…

linux注册平台驱动,关于Linux驱动的平台注册方式-- platform_driver_register

http://hi.baidu.com/deep_pro/blog/item/754f7764b73099fbf636544a.htmlcdev_add 、register_blkdev 这样的驱动注册函数platform_driver_register这样的写法&#xff0c;但是没有看到哪本书介绍了相关内容简要说&#xff0c;使用这种方式&#xff0c;可以轻松的实现device和d…

JDBC连接Oracle数据库的参数配置

Oracle 的连接 URL 字符串&#xff1a;jdbc:oracle:thin:host:port:sid 在数据库配置文件 db_oracle.properties 的配置字段如下&#xff1a; urljdbc:oracle:thin:localhost:1521:orcl dbUserlwx dbPassword123456 driverNameoracle.jdbc.OracleDriver

jdk 1.8 字符串+_JDK 9/10/11:Java字符串上+ =的副作用

jdk 1.8 字符串问题“ 为什么array [i &#xff05;n] i ”在Java 8和Java 10中给出不同的结果&#xff1f; ”已于本周初发布在StackOverflow.com上 。 它指出JDK9和更高版本中存在的Java编译器中的错误 &#xff0c;但JDK8中不存在。 如StackOverflow线程上所述&#xff0…

IntelliJ IDEA for Mac 如何设置字体和字号

按组合键 Command , 打开偏好设置窗口&#xff0c;在左侧菜单导航栏找到 Editor --> Font&#xff0c;如下图所示&#xff1a;

vs mono linux,[.NET][C#.NET]走跳在Linux的人生(八).NET Core与Mono执行

8种机械键盘轴体对比本人程序员&#xff0c;要买一个写代码的键盘&#xff0c;请问红轴和茶轴怎么选&#xff1f;我们来试试用.NET Core从Windows环境开发&#xff0c;然后porting到Linux环境(布署及执行.NET Core)&#xff0c;之前曾看过stackoverflow文章提到Mono的性能问题&…

java char类型空值_展望Java的未来:空值类型

java char类型空值尽管有前途的Java值类型不是迫在眉睫&#xff0c;但我偶尔还是喜欢在OpenJDK valhalla-dev邮件列表中打听一下&#xff0c;以了解事情的进展情况并了解即将发生的事情。 诚然&#xff0c;由于我对所用术语的了解有限&#xff0c;并且其中某些消息的底层细节&a…

IntelliJ IDEA 如何设置编辑窗口的背景图片

按下组合键 Shift Command A&#xff0c;打开查找动作的窗口&#xff0c;在输入框中输入 set Background Image&#xff0c;然后选中它&#xff0c;如下图所示&#xff1a; 背景图片设置窗口如下所示&#xff1a;

2013下半年福建高等学校非计算机专业学生计算机二级c语言原题,2013年福建省计算机二级c语言真题及答案(填空题部分)...

1、程序Ccon441.c的功能是&#xff1a;从键盘输入一个直角三角形的两条直角边a和b&#xff0c;计算并输出其周长和面积。将程序填写完整。#include#includevoid main(){double a,b,c,circle,area;printf("Input 2 edges:");scanf(/**/ "%lf %lf" /**/,&…

spring boot示例_Spring Boot完成示例

spring boot示例这篇文章提供了一个使用Spring Boot开发松耦合的REST服务的完整示例。 使用spring boot&#xff0c;我们可以开发可独立运行的生产就绪的Java应用程序&#xff0c;使其成为独立的应用程序&#xff0c;它具有最小的依赖关系并且与其他应用程序的耦合较少。 大多数…

IntelliJ IDEA for Mac的窗口操作

最大化代码编辑窗口的快捷键&#xff1a;Fn Shift Command F12

c++语言编译环境,Windows安装C++开发环境-C++开发环境搭建-嗨客网

Windows安装C语言开发环境教程这里&#xff0c;我们选择使用 Dev-C。Dev-C下载地址https://sourceforge.net/projects/orwelldevcpp/Dev-C下载打开上面的链接&#xff0c;打开 Dev-C 的下载页面&#xff0c;如下图所示&#xff1a;这里我们点击 Download&#xff0c;跳转到下载…