千家信息网

Spring Security怎么实现自定义访问策略

发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,本篇内容主要讲解"Spring Security怎么实现自定义访问策略",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Spring Security怎么实现
千家信息网最后更新 2025年01月21日Spring Security怎么实现自定义访问策略

本篇内容主要讲解"Spring Security怎么实现自定义访问策略",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Spring Security怎么实现自定义访问策略"吧!

前言:

我们将探索一个用户共享电子表格的系统,每个电子表格的访问权限单独存储。我们已经尽可能简单地对权限存储进行了显式建模;想象一下,它在调用其他地方的记录系统。请注意,在这个简化的实现中,访问决定是二进制的:要么有访问权,要么没有。在这个实现中,读/写访问权没有区别。

1.安全注释

打开SpreadsheetService会显示一个用@Secured注释的方法。

@Secured("com.jdriven.model.Spreadsheet")public void read(Spreadsheet spreadsheet) {  log.info("Reading {}", spreadsheet);}

@Secured 注解参数是我们要限制的域对象访问的完全限定类名。该方法具有相同类型的参数,这是我们将保护的特定实例。

方便地,@Secured注解不需要按名称引用参数;它可以在我们的AccessDecisionVoter中单独按类型检索。

2.投票机制

访问决策由AccessDecisionManager做出,它将授权给已配置的AccessDecisionVorters列表。投票者可以根据自己的应用程序逻辑选择批准或拒绝特定的方法调用。如果投票人不能决定某个特定的方法调用,它可以选择弃权,将决定权留给其他投票人。默认情况下,您将获得基于确认的访问决策管理器,该管理器允许在只有一个投票人投票授予访问权限时调用方法,而不管是否有投票拒绝访问。

我们的四个目的是,我们需要一个自定义投票者,根据存储的访问记录验证用户对电子表格的访问。我们通过扩展AbstractAclVoter来实现这一点,对于已配置的已处理域对象类和方法调用,AbstractAclVoter可以查找参数域对象实例。我们将实现投票方法,该方法由经过身份验证的用户、安全方法调用和一组ConfigAttributes传递。

@Overridepublic int vote(Authentication authentication, MethodInvocation methodInvocation, Collection attributes) {  for (ConfigAttribute configAttribute : attributes) {    if (supports(configAttribute)) {      User principal = (User) authentication.getPrincipal();      Spreadsheet domainObjectInstance = (Spreadsheet) getDomainObjectInstance(methodInvocation);      return hasSpreadsheetAccess(principal, domainObjectInstance) ? ACCESS_GRANTED : ACCESS_DENIED;    }  }  return ACCESS_ABSTAIN;}

我们的投票者被传递一个或多个ConfigAttributes,就像传递给@Secured注释本身一样,我们通过调用布尔支持(ConfigAttribute)来验证它:

@Overridepublic boolean supports(ConfigAttribute attribute) {  return getProcessDomainObjectClass().getName().equals(attribute.getAttribute());}

考虑到这些实现,只有当ConfigAttribute与配置的ProcessDomainObjectClass不匹配时,投票者才会弃权。根据存储的访问记录,在所有其他情况下,投票人将投票批准或拒绝访问。

3.配置

我们需要配置应用程序的两个部分,以便触发自定义访问决策投票者逻辑。

首先,我们需要通过@EnableGlobalMethodSecurity(securedEnabled=true)激活@Secured注释,这是在AccessDecisionConfiguration中完成的。

其次,我们需要将电子表格AccessDecisionVoter添加到AccessDecisionManager考虑的决策投票者列表中。为此,我们扩展了GlobalMethodSecurity配置以覆盖AccessDecisionManager AccessDecisionManager()。我们称之为super.accessDecisionManager()获取默认的基于确认的访问决策管理器,只需在末尾添加我们自己的投票人。

如果您需要保护多个域对象类型,可以很容易地向列表中添加更多投票者。

4.测验

我们的电子表格AccessDecisionVoterit测试使用模拟用户Alice和Bob,以及恶意的第三用户Eve,他们都试图访问单个电子表格。

我们可以看到,对电子表格的访问遵守每个测试开始时存储的规则:

  • Alice可以访问电子表格。

  • Bob还可以访问电子表格。

  • Eve无法访问电子表格,因为她收到了AccessDeniedException。

到此,相信大家对"Spring Security怎么实现自定义访问策略"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

投票 方法 电子 表格 投票者 配置 投票人 用户 决策 存储 参数 对象 注释 策略 权限 类型 管理 验证 安全 内容 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 平台网络安全系统 服务器日志路径 抓取数据库数据到excel 华硕服务器怎么样知乎 油田网络安全宣传周活动总结 软件开发部门内审检查表 回收服务器如何进行数据安全保护 远程服务器设置教程 宿豫区直销网络技术市场 崇明区自动化软件开发推荐咨询 深圳企派网络技术有限公司 网络安全等级保护数据库测评 服务器管理下载安装 苏州汽车控制器底层控制软件开发 科技互联网解决方案 科学小实验网络技术服务 候鸟网络技术有限公司 汕头支付软件开发常见问题 战地5可以选择服务器吗 个性化管理系统软件开发 数据库需要内存 临汾学校触摸翻书软件开发公司 手机请求服务器异常请稍后重试 网络安全思维导图模板 关于网络安全周手抄报的内容 db2 删除本地数据库 广州网络技术公司有哪些 计算机网络技术中专高频考点 服务器怎么搭建网站 软件开发模型的适用范围
0