Spring Security学习(三)授权管理器

Spring security(五)-完美权限管理系统(授权过程分析) 1. 权限管理相关概念   权限管理是一个几乎所有后台系统的都会涉及的一个重要组成部分,主要目的是对整个后台管理系统进行权限的控制。常见的基于角色的访问控制,其授权模型为“用户-角色-权限”,简明的说,一个用户拥有多个角色,一个角色拥有多个权限。其中, 用户: 不用多讲,大家也知道了; 角色: 一个集合的概念,角色管理是确定角色具备哪些权限的一个过程 ; 权限: 1).页面权限,控制你可以看到哪... 阅读详情

在第一篇的授权部分,有分析到

授权主要由AbstractSecurityInterceptor及其子类完成

具体到实际代码中其实是

			// 用户通过了认证,基于当前用户信息,和目标对象的安全属性配置,进行相应的权限检查
			this.accessDecisionManager.decide(authenticated, object, attributes);

AccessDecisionManager

AccessDecisionManager 是一个决策管理器接口,主要有下面三个方法:

void decide(Authentication authentication, Object object,
			Collection<ConfigAttribute> configAttributes) throws AccessDeniedException,
			InsufficientAuthenticationException;

该方法是投票过程, 有三个参数 :

  1. Authentication authentication代表访问者当事人,是访问者的认证令牌,包含了访问者的权限
  2. Object object表示目标安全对象
  3. Collection<ConfigAttribute> configAttributes表示访问目标安全对象所需要的权限
boolean supports(ConfigAttribute attribute);

该方法用于检测ConfigAttribute attribute是否是当前 AccessDecisionManager 支持的 ConfigAttribute 类型。

boolean supports(Class<?> clazz);

检测Class clazz是否是当前 AccessDecisionManager 支持的安全对象。

AccessDecisionManager 实现

Spring Security内置的 AccessDecisionManager 的实现是抽象类 AbstractAccessDecisionManager

public abstract class AbstractAccessDecisionManager implements AccessDecisionManager,
		InitializingBean, MessageSourceAware {
   
   
		
	protected final Log logger = LogFactory.getLog(getClass());

	// 通过这一组AccessDecisionVoter来投票表决完成授权
	private List<AccessDecisionVoter<?>> decisionVoters;

	protected MessageSourceAccessor messages = SpringSecurityMessageSource.getAccessor();

	private boolean allowIfAllAbstainDecisions = false;

	protected AbstractAccessDecisionManager(
			List<AccessDecisionVoter<?>> decisionVoters) {
   
   
		Assert.notEmpty(decisionVoters, "A list of AccessDecisionVoters is required");
		this.decisionVoters = decisionVoters;
	}
	
	public void afterPropertiesSet() {
   
   
		Assert.notEmpty(this.decisionVoters, "A list of AccessDecisionVoters is required");
		Assert.notNull(this.messages, "A message source must be set");
	}

	protected final void checkAllowIfAllAbstainDecisions() {
   
   
		if (!this.isAllowIfAllAbstainDecisions()) {
   
   
			throw new AccessDeniedException(messages.getMessage(
					"AbstractAccessDecisionManager.accessDenied", "Access is denied"));
		}
	}

	public List<AccessDecisionVoter<?>> getDecisionVoters() {
   
   
		return this.decisionVoters;
	}

	public boolean isAllowIfAllAbstainDecisions() {
   
   
		return allowIfAllAbstainDecisions;
	}

	public void setAllowIfAllAbstainDecisions(boolean allowIfAllAbstainDecisions) {
   
   
		this.allowIfAllAbstainDecisions = allowIfAllAbstainDecisions;
	}

	public void setMessageSource(MessageSource messageSource) {
   
   
		this.messages = new MessageSourceAccessor(messageSource);
	}

	public boolean supports(ConfigAttribute attribute) {
   
   
		for (AccessDecisionVoter voter : this.decisionVoters) {
   
   // 只要有一个匹配,返回true
			if (voter.supports(attribute)) {
   
   
				
Spring Security(05)授权配置授权流程分析 认证控制 springsecurity 的认证过程的处理是通过过滤器进行拦截处理的,在请求前判断是否有具体的权限来做一些控制; 基本流程是通过过滤器 拿到请求信息,交给访问决策管理器(AccessDecisionManager) 判断是否有权限, 而 访问决策管理器(AccessDecisionManager) 通过投票机制判断是否有权限,对应的实现类聚合了多个 AccessDecisionVoter (访问投票器), 对于一个请求 所有的投票器可以投出自己的一票 通过 ,拒绝 或弃权,根据投票的最终结果 阅读详情

相关推荐

Spring Security 6 系列之五 - 授权管理

我们在本章中了解了授权(访问控制)的原理以及一些基本权限模型,这样我们就已经基本了解Spring Security的认证和授权两大重要模块。接下来我们可能会更深入或者说跟贴近实践使用Spring Security的功能,下一章我们从Session会话管理开始。

代码让AI扣 1417

Spring Security OAuth专题学习-授权服务源码解读

授权服务主要完成以下四个核心功能: 客户端授权关系管理; 接收用户或客户端登录请求,生成accessToken Token存储 Token校验 本文将从源码层面分析授权服务如何实现上述四个功能。 关于Spring Oauth2的一些基础概念及示例,可参考:http://liumoran.cn/topic/myTopics/1 1. 概述 授权服务包含有以下几个关键类: EnableAutho...

icarusliu的专栏 1944

Spring Security认证与授权机制深度解析

认证与授权是构建安全系统的两大基石,在Java生态中Spring Security通过过滤器链机制提供了完整的解决方案。认证过程通过AuthenticationManager协调多个组件完成身份验证,而授权机制则基于角色和权限实现资源访问控制。现代应用通常采用JWT等无状态认证方案,结合RBAC或ABAC模型实现细粒度权限管理。在微服务架构下,OAuth2协议和资源服务器模式成为跨服务安全通信的标准方案。对于企业级应用,需要特别关注密码安全存储、动态权限控制、防暴力破解等安全实践,同时兼顾认证授权系统的性能

weixin_34235457的博客 425

全面掌握Spring Security:从基础到高级应用

本专栏为1-3年经验的Java开发者系统讲解Spring Security框架,涵盖基础入门到高级应用。内容包含六大模块:基础概念与核心组件、多种身份验证实现(表单、JWT、OAuth2.0、多因素认证)、细粒度授权管理(角色/权限/动态授权)、Web应用集成(MVC/Thymeleaf/RESTful/WebSocket)、高级特性(Remember-Me/CSRF防护/会话控制)以及性能优化与监控。通过150+代码示例,帮助开发者掌握安全开发规范,解决认证授权等实际问题,提升Web应用安全防护能力。

fykam的博客 825

SAP FI 提示没有为会计年度0 定义版本2025 GP626

SAP 错误 GP626 是一个常见的系统消息,通常表示某个会计年度的版本(如版本 0)未被定义或未激活。:在执行某些事务(如创建采购订单、过账凭证或维护成本中心)时,系统会检查相关版本是否已定义。的“Settings for Each Fiscal Year”界面中,选择一个已激活的会计年度。的“Settings for Each Fiscal Year”界面中,找到未激活的会计年度。:在控制范围(Controlling Area)中,未为指定的会计年度定义版本 0。如果没有,添加或复制现有年度的设置。

GAVIN 2487

x265探索与研究(四):如何编码视频?

如何编码视频?           本文介绍x265中的两种编码视频方法,一是采用命令行的方法;二是GUI的方式。   1、命令行的方法   (1)、第一种方式生成*.265格式的视频文件           第一种方式可以生成*.265格式的视频文件,对应的命令为: x265 --input-res 352x288 --fps 30 hall_cif_352x288_300.y

成长Bar的博客专栏 3934

MT4量化交易入门:手把手教你用MQL4编写第一个外汇EA(含完整代码)

本文详细介绍了如何使用MQL4在MT4平台上编写第一个外汇EA,涵盖从开发环境配置到均线交叉策略实现的完整流程。通过手把手教学和完整代码示例,帮助量化交易新手快速掌握外汇自动化交易的核心技术,实现高效的MT4量化交易系统。

mmm90的博客 525

扫地机器人:从仿真到决策,一个完整SLAM导航系统的自研之路

本文详细记录了从零开始自研扫地机器人SLAM导航系统的全过程,涵盖ROS-Gazebo仿真系统搭建、地图预处理优化、全覆盖规划算法迭代等关键技术。通过三次算法升级,最终实现92%的清洁效率,并分享DWA调参、状态机设计等实战经验,为开发者提供从仿真到落地的完整解决方案。

weixin_29053695的博客 352

带挂牵引车前向运动模型推导及仿真实现

牵引车-半挂车的车辆结构与普通的车辆相比增加了一个半挂车,它们之间通过鞍座相连接,为了分析半挂牵引车运动过程中的位姿和状态,本文将基于车辆的机械结构建立对应的运动学模型,该模型基于以下假设: 车辆行驶过程中,道路平坦且无凸凹; 车辆低速行驶,且运行过程中车身无侧倾和俯仰运动; 车辆行驶过程中,轮胎无形变,无侧向滑动,且无侧向力; 牵引车和半挂车均满足阿克曼转向几何原理; 牵引车与半挂车不会发现折叠。

jianmo的博客 3181

ARM6818嵌入式视频播放器:硬解加速与Framebuffer渲染实战

嵌入式Linux音视频系统是智能座舱、工业HMI等场景的核心能力,其本质是软硬协同的实时多媒体处理系统。原理上需打通内核驱动(如VPU硬件编解码、FIMD多图层合成)、用户空间框架(GStreamer pipeline定制、SDL2硬件渲染)与应用层同步机制(PTS/HTS双时钟校准)。技术价值在于显著降低CPU负载(硬解可压至15%以下)、提升启动速度(<1.2s首帧)并保障音画同步精度(±3ms级)。典型应用场景包括车载信息娱乐、边缘AI终端及无X11的工控显示设备。本文基于ARM6818平台,深入VP

weixin_32456485的博客 77

K8S部署Java项目 pod的logs报错为:Error: Unable to access jarfile app.jar

每个人都有惰性,但不断学习是好好生活的根本,共勉!

感谢阅读 2600

25、BDS-3卫星信号性能与PPP-B2b增强消息完整性分析

本文对BDS-3卫星信号性能及PPP-B2b增强消息的完整性进行了系统分析。评估了MEO、IGSO和GEO卫星的轨道与时钟精度,得出BDS-3总体SISRE为0.25 m,系统完整性可覆盖99.999%的误差。分析表明SIS中断主要由时钟调整和轨道机动引起,个别卫星存在因境外监测受限导致的非计划中断。通过自研解码软件对PPP-B2b增强消息进行采集与解析,实验结果显示BDS-3和GPS的平均历元完整性率均高于98.55%,其中卫星掩码和时钟校正消息的完整性率超过99.8%。研究还发现IGSO卫星相比MEO卫

quiet的专栏 143

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

上一篇: Spring Security学习(二)认证管理器
下一篇: Spring Security Oauth2 学习(客户端)
司马老峰
博客等级 码龄11年 21粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值