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还带有一个体系结构,用于定义如何评估和执行策略。

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

  • 策略执行点(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资源包下创建资源包

idea资源包下创建资源包_根据谁创建资源授权资源相关推荐

  1. IDEA如何在包下建立子包

    idea如何在包下建立子包 第一次在包下建立子包时候出现了问题 在java > springmvc包下再new上一个package controller的时候就会出现这个样子 如何解决 在IDE ...

  2. IDEA包下不能建包问题

    IDEA包下不能建包问题 刚开始学习idea的时候想要在包下建立子包,总是不成功. 在包上右键new->package,输入包的名称,只会更改原有包的名称: 或者删除前面自动填充的名字填写子包的 ...

  3. Eclipse在包下新建子包

    1 首先在project explore模式下,将package presentation调为hierarchical 2  比如在com.coolweather.app包下新建子包 3 比如新建子包 ...

  4. 最新版idea如何在包下建立子包(dao包下建立impl包)

    本人Java新手,对idea也不太熟悉,最近想在src源文件夹下建立包后,再建立子包时出了问题(dao包下建impl),后来上网搜了资料才学会了操作.接下来给大家演示 假如我想建一个下图的体系:pro ...

  5. java创建access数据库_使用Java创建Access数据库文件(.mdb或.accdb)

    Jackcess 2.x的更新:现在使用DatabaseBuilder创建(或打开)数据库,因此要创建一个新的数据库文件,我们这样做 import java.io.File; import java. ...

  6. eclipse如何在包下新建一个包

    修改eclipse布局Package Presentation 为Hierarchical 建一个包为com.csdn.ttshu 点击此包,右击新建com.csdn.ttshu.hello 就相当于 ...

  7. 创建维护计划失败_如何善于创建和维护大型系统

    创建维护计划失败 最初,本文只是对本书的回顾,但是当我进入书中时,我意识到我想谈谈它所描述的方法如何适用于几个不同的组(安全人员和开源项目),以及所以我已经放弃了. 那我是怎么看过这本书的呢? 几个月 ...

  8. 用python创建微信机器人_用Python创建微信机器人

    原标题:用Python创建微信机器人 文/裸睡的猪哥 图片来源于网络 微信,一个日活10亿的超级app,不仅在国内社交独领风骚,在国外社交也同样占有一席之地.今天我们要讲的便是如何用Python来做一 ...

  9. 创建bootstrap项目_使用Bootstrap创建第一个网页

    创建bootstrap项目 使用Bootstrap创建第一个网页 (Create First Webpage with Bootstrap) In the previous article, we l ...

  10. dos创建mysql数据库_用命令创建MySQL数据库

    一.连接MYSQL 格式: mysql -h主机地址 -u用户名 -p用户密码 1. 连接到本机上的MYSQL. 首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u roo ...

最新文章

  1. SpringBoot请求日期参数异常(Failed-to-convert-value-of-type-'java-lang-String'-
  2. 报名 | 二值化网络 基于素描图的图像检索论坛
  3. 聚宽macd底背离_MACD指标图解!如何解决滞后性,规避盲目买进卖出!
  4. Oracle 序列的创建和使用
  5. 多种脚本语言生成九九乘法口诀表
  6. Jexus支持HTTPS协议
  7. P4169-[Violet]天使玩偶/SJY摆棋子【CDQ分治】
  8. 日语学习-多邻国-关卡1-时间
  9. SpringBoot 2 快速整合 RabbitMQ
  10. 关于golden gate director client的一点点使用总结
  11. 1.根据MAC地址抓包
  12. 光电经典好书:《光电系统设计基础》-吴晗平
  13. 2021财经直播系统 H5网页直播 大区直播间源码
  14. 2022年软件评测师考试大纲
  15. 技巧:Eclipse阿里代码规范插件
  16. mt7620a上wifi中继的实现
  17. 导弹打飞机问题(贪心算法)
  18. suparc服务器没信号,SupARC街机对战平台
  19. 3年试点即将到期,电子印章将成网络货运新动力
  20. Python自我成长笔记(二)

热门文章

  1. [数论系列一]C Looooops,跳跳棋,The Luckiest number,CF906D Power Tower,Minimal Power of Prime,仪仗队,LCMSUM
  2. codeforces:1361(div1)1362(div2):总结
  3. P5643-[PKUWC2018]随机游走【min-max容斥,dp】
  4. jzoj3846-七天使的通讯【二分图判定】
  5. jzoj2679-跨时代【背包,dfs,状压】
  6. jzoj4804-[NOIP2016提高A组模拟9.28]成绩调研【指针,模拟】
  7. nssl1218-TRAVEL【SPFA】
  8. [CF850F] Rainbow Balls
  9. Codeforces Round #671 (Div. 2)
  10. Java 线程池详解及实例代码