返回顶部
首页 > 资讯 > 精选 >Spring Security怎么实现自定义访问策略
  • 148
分享到

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

2023-06-29 07:06:59 148人浏览 独家记忆
摘要

本篇内容主要讲解“spring Security怎么实现自定义访问策略”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“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<ConfigAttribute> 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怎么实现自定义访问策略”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Spring Security怎么实现自定义访问策略

本文链接: https://lsjlt.com/news/323290.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Spring Security怎么实现自定义访问策略
    本篇内容主要讲解“Spring Security怎么实现自定义访问策略”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring Security怎么实现自定义访问策略”吧!...
    99+
    2023-06-29
  • SpringSecurity实现自定义访问策略
    目录1.安全注释2.投票机制3.配置4.测验前言: 我们将探索一个用户共享电子表格的系统,每个电子表格的访问权限单独存储。我们已经尽可能简单地对权限存储进行了显式建模;想象一下,它在...
    99+
    2024-04-02
  • 在spring中利用security怎么实现自定义决策管理器
    在spring中利用security怎么实现自定义决策管理器?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。首先介绍下Spring的决策管理器,其接口为AccessDecis...
    99+
    2023-05-31
    spring security
  • spring security 自定义Provider 如何实现多种认证
    目录security内部认证流程是这样的1、 Controller2、spring security3、调用匹配的provider内部认证逻辑4、UserDetailsService...
    99+
    2024-04-02
  • Spring Security 自定义授权服务器实践
    相关文章: OAuth2的定义和运行流程Spring Security OAuth实现Gitee快捷登录Spring Security OAuth实现GitHub快捷登录Spring Secur...
    99+
    2023-09-01
    java 微服务 spring security
  • Spring Security自定义认证逻辑实例详解
    目录前言分析问题自定义 Authentication自定义 Filter自定义 Provider自定义认证成功/失败后的 Handler配置自定义认证的逻辑测试总结前言 这篇文章的内...
    99+
    2024-04-02
  • Spring Cloud中如何自定义Ribbon负载均衡策略
    小编给大家分享一下Spring Cloud中如何自定义Ribbon负载均衡策略,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. 主启动类处理还是使用上一节的客户...
    99+
    2023-06-04
  • Spring Boot中整合Spring Security并自定义验证代码实例
    最终效果实现页面访问权限限制 2、用户角色区分,并按照角色区分页面权限 3、实现在数据库中存储用户信息以及角色信息 4、自定义验证代码效果如下: 免验证页面  登陆页面 在用户未登录时,访问任意有权限要求的页面都会自动跳转到登陆页...
    99+
    2023-05-31
    spring security spring boo
  • Holer怎么实现自定义域名访问本地WEB应用
    这篇文章主要讲解了“Holer怎么实现自定义域名访问本地WEB应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Holer怎么实现自定义域名访问本地WEB应用”吧!自定义域名访问本地WEB应...
    99+
    2023-06-04
  • shiro与spring security怎么用自定义异常处理401错误
    这篇文章主要介绍shiro与spring security怎么用自定义异常处理401错误,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!shiro与spring security自定义异常处理401背景现在是...
    99+
    2023-06-21
  • Spring Security基于注解的接口角色访问控制怎么实现
    本文小编为大家详细介绍“Spring Security基于注解的接口角色访问控制怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Spring Security基于注解的接口角色访问控制怎么实现”文章能帮助大家解决疑惑,下面跟着小编的...
    99+
    2023-06-16
  • 关于Spring Data Jpa 自定义方法实现问题
    目录Spring Data Jpa 自定义方法的实现自己的接口主接口我新建一个类来实现我自己的接口Spring Data Jpa自定义方法关键字Spring Data Jpa 自定义...
    99+
    2024-04-02
  • 拦截器在Spring MVC中怎么实现自定义
    拦截器在Spring MVC中怎么实现自定义?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1. 引言拦截器(Interceptor)实现对每一个请求处理前后进行...
    99+
    2023-05-31
    spring mvc
  • Spring Security OAuth2.0(五)-----OAuth2实现自定义统一认证登录页/自定义授权页/基于mysql存储数据
    本次实例涉及三个项目 核心项目工程unify_authorization_server(认证授权登录) 资源服务器项目unify_resource_server 测试项目是前面几篇写的项目 这里没有改...
    99+
    2023-09-11
    spring mysql java
  • Spring Cloud gateway自定义错误处理Handler怎么实现
    本文小编为大家详细介绍“Spring Cloud gateway自定义错误处理Handler怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Spring Cloud gateway自定义错误处...
    99+
    2023-07-05
  • Spring Cloud OAuth2怎么实现自定义token返回格式
    这篇“Spring Cloud OAuth2怎么实现自定义token返回格式”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我...
    99+
    2023-07-02
  • spring boot 自定义starter的实现教程
    spring boot 使用 starter 解决了很多配置问题, 但是, 他是怎么来解决这些问题的呢?这里通过一个简单的例子, 来看一下, starter是怎么来设置默认配置的.一. 建 starter 项目自定义的starter...
    99+
    2023-05-30
    spring boot 自定义
  • Spring@Component自定义注解实现详解
    目录引子Java里的注解注解是什么元注解注解的保存策略自定义注解注解元素注解处理器注解是什么自己写一个@Component注解准备工作代码实现准备@MyComponent注解准备一个...
    99+
    2024-04-02
  • 怎么在Spring中自定义NamespaceHandler
    今天就跟大家聊聊有关怎么在Spring中自定义NamespaceHandler,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。定义Beanpackage com.lcl.sp...
    99+
    2023-06-14
  • spring怎么自定义bean注入
    在Spring中,我们可以使用两种方式来自定义Bean的注入: 使用注解方式:通过在Bean定义类上添加注解来告诉Spring容...
    99+
    2023-10-26
    spring
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作