Spring Security 整体架构

news2024/12/24 3:40:10

Spring Security 整体架构

整体架构

在的架构设计中,认证 和 授权
是分开的,无论使用什么样的认证方式。都不会影响授权,这是两个独立的存在,这种独立带来的好处之一,就是可以非常方便地整合一些外部的解决方案。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wFQPEKCD-1682164391584)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20230422192427784.png)]

认证

AuthenticationManger

在Spring Security中认证是由AuthenticationManager`接口来负责的

public interface AuthenticationManager {
   Authentication authenticate(Authentication authentication) throws AuthenticationException; 
}

  • 返回Authentication 表示认证成功

  • 返回AuthenticationException异常,表示认证失败。

AuthenticationManager主要实现类为ProviderManager,在ProviderManager中管理了众多AuthenticationProvider实例。在一次完整的认证流程中,Spring Security允许存在多个AuthenticationProvider,用来实现多种认证方式,这些AuthenticationProvider都是由ProviderManager 进行统一管理的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lNjfEx2h-1682164391585)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20230422193118093.png)]

Authentication

认证以及认证成功的信息主要是由 Authentication 的实现类进行保存的,其接口定义为:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S8ziNEwx-1682164391585)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20230422193356204.png)]

  • getAuthorities获取用户权限信息

  • getCredentials获取用户凭证信息,一般指密码

  • getDetails获取用户详细信息

  • getPrincipal获取用户身份信息,用户名、用户对象等

  • isAuthenticated用户是否认证成功

SecurityContextHolder

SecurityContextHolder用来获取登录之后用户信息。Spring Security 会将登录用户数据保存在Session中。但是,为了使用方便,Spring Security在此基础上还做了一些改进,其中最主要的一个变化就是线程绑定。当用户登录成功后,Spring Security会将登录成功的用户信息保存到SecurityContextHolder 中。SecurityContextHolder 中的数据保存默认是通过ThreadLocal来实现的,使用 ThreadLocal创建的变量只能被当前线程访问不能被其他线程访问和修改,也就是用户数据和请求线程绑定在一起。当登录请求处理完毕后,SpringSecurity会将SecurityContextHolder 中的数据拿出来保存到Session中,同时将 SecurityContexHolder 中的数据清空。以后每当有请求到来时,Spring Security 就会先从 Session 中取出用户登录数据,保存到SecurityContextHolder中,方便在该请求的后续处理过程中使用,同时在请求结束时将SecurityContextHolder中的数据拿出来保存到 Session 中,然后将 SecuritySecurityContextHolder中的数据清空。这一策略非常方便用户在 Controller、Service 层以及任何代码中获取当前登录用户数据。

授权

AccessDecisionManager

AccessDecisionManager(访问决策管理器)1用来决定此次访问是否被允许。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FnM7kq3U-1682164391586)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20230422194515041.png)]

AccessDecisionVoter

AccessDecisionVoter(访问决定投票器),投票器会检查用户是否具备应有的角色进而投出赞成、反对或者弃权票。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2S0EjkKv-1682164391586)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20230422194618320.png)]

AccessDecisionVoter和AccessDecisionManager都有众多的实现类,在AccessDecisionManager中会换个遍历AccessDecisionVoter,进而决定是否允许用户访问,因而AveasDecisionVoter和AccessDecisionManager两者的关系类似于AuthenticationProvider和 ProviderManager 的关系。

ConfigAttribute

ConfigAttribute,用来保存授权时的角色信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NU0BbkyN-1682164391587)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20230422194920934.png)]

在Spring Security 中,用户请求一个资源(通常是一个接口或者一个Java方法)需要的角色会被封装成一个ConfigAttribute对象,在ConfigAttribute中只有一个getAttribute方法,该方法返回一个String 字符串,就是角色的名称。一般来说,角色名称都带有一个ROLE_前缀,投票器AccessDecisionVoter所做的事情,其实就是比较用户所具各的角色和请求某个资源所需的ConfigAtuibute之间的关系。

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

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

相关文章

(数字图像处理MATLAB+Python)第五章图像增强-第三节:基于照度反射模型的图像增强

文章目录 一:基于同态滤波的增强(1)概述(2)程序 二:Retinex理论(1)Retinex理论概述(1)SSR(单尺度Retinex 算法)(2&#xf…

Oracle的学习心得和知识总结(二十二)|Oracle数据库Real Application Testing之Database Replay实操(二)

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《Oracle Database SQL Language Reference》 2、参考书籍:《PostgreSQL中文手册》 3、EDB Postgres Advanced Server User Gui…

操作系统概述及Linux基本指令(1)

目录 一. 操作系统 1.1 什么是操作系统 1.2 操作系统的核心工作 二. Linux的基本指令 2.1 ls指令 -- 打印文件名 2.2 pwd指令 -- 显示路径 2.3 cd指令 -- 进入特定目录 2.4 touch指令 -- 创建普通文件 2.5 mkdir指令 -- 创建路径 2.6 rmdir/rm指令 -- 删除路径或普通…

【GeoDjango框架解析】空间方法的ORM查询

原文作者:我辈理想 版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。 Django数据操作-ORM 第一章 【Django开发入门】ORM的增删改查和批量操作 第二章 【Django开发入门】ORM查询分页以及返回Json格式 文章目录 Django数据…

中国人民大学与加拿大女王大学金融硕士——在职读研该如何平衡学习与工作呢

边工作边考研,对于所有人来说都是个不小的挑战,每年都有大量在职生因为焦躁、压力而中途离场。学习时间碎片化,复习进度特别容易被工作上的事情所打断,再想“重新启动”就会很难。想要节省备考时间建议你读免联考的中外合作办学项…

基于Canvas实现图片的上传和渲染

1 Canvas 1.1 什么是Canvas 是一个可以使用脚本 (通常为JavaScript) 来绘制图形的 HTML 元素。例如&#xff0c;它可以用于绘制图表、制作图片构图或者制作简单的动画。 1.2 基本使用 宽高&#xff1a; <canvas id"tutorial" width"150" height&qu…

<C++>C++入门

目录 前言 一、C关键字&#xff08;C98&#xff09; 二、命名空间 1. 命名空间定义 2. 命名空间的使用 3. 命名空间的使用有三种方式&#xff1a; 三、C输入&输出 四、缺省参数 1. 缺省参数概念 2. 缺省参数的分类 3. 缺省参数的应用 五、函数重载 六、引用 1. 引用的概念…

web实验(2)

&#xff08;1&#xff09; 应用html标签和css完成如下所示页面效果&#xff0c;图片见附件。 说明&#xff1a; 内容相对于浏览器居中,宽860px鼠标移动至列表项上&#xff0c;显示背景色#F8F8F8分割线2px solid #ccc&#xff0c;每项高130px第一行文字&#xff1a;20px 黑体…

4.功能权限

基于角色的权限控制&#xff0c;用户分配角色&#xff0c;角色分配菜单。 1. 权限注解 1.基于【权限标识】的权限控制 权限标识&#xff0c;对应 system_menu 表的 permission 字段&#xff0c;推荐格式为 {系统}:{模块}:{操作}&#xff0c;例如说 system:admin:add 标识 sy…

chatgpt智能提效职场办公-ppt怎么做才好看又快

作者&#xff1a;虚坏叔叔 博客&#xff1a;https://xuhss.com 早餐店不会开到晚上&#xff0c;想吃的人早就来了&#xff01;&#x1f604; 制作ppt有几个方面可以考虑&#xff0c;以实现既好看又快速的目的&#xff1a; 使用模板&#xff1a;使用ppt模板可以更快速地制作出一…

JavaScript概述二(Date+正则表达式+Math+函数+面向对象)

1.Date 1.1 new一个Date对象表示当前系统时间 var nownew Date(); console.log(now);1.2 根据传入的时间格式表示时间 var date1new Date(2023-4-20 00:16:40); console.log(date1); 1.3 传入时间毫秒数&#xff0c;返回从1900年1月1日8时&#xff08;东八区&#xff09;X分X…

C语言入门篇——操作符篇

目录 1、操作符分类 2、操作符的属性 3、算术操作符 4、移位操作符 5、位操作符 6、赋值操作符 7、单目操作符 8、关系操作符 9、逻辑操作符 10、条件操作符 11、逗号操作符 12、下标引用、函数调用和结构成员 1、操作符分类 算术操作符&#xff08;&#xff0c;-&…

办公必备!不再被格式问题困扰,轻松搞定文档转换!

大家平时在工作中会需要将文档转换为其他格式吗&#xff1f; 日常工作中&#xff0c;经常碰到需要文件格式转换的情况&#xff0c;对于掌握了一些转换技能的朋友说&#xff0c;文件格式转换自然不在话下 对于不熟练的朋友来说&#xff0c;想要轻松转换文件格式&#xff0c;就…

c++ std::enable_shared_from_this作用

enable_shared_from_this 是什么 std::enable_shared_from_this 是一个类模板&#xff0c;用来返回指向当前对象的shared_ptr智能指针。在说明它的作用前我们可以看一下如下代码&#xff1a; demo.cpp #include <memory> #include <iostream>class A { public:A…

web实验(3)

应用JavaScript编写留言的功能&#xff0c;在文本中输入文字提交后&#xff0c;在下方进行显示。 提示&#xff1a;可将下方内容以列表体现&#xff0c;提交时动态创建列表的项。可使用以下两种方式之一的方法&#xff1a; 使用CreateElenment动态创建li标签及li中的文本 在列…

PADS-LOGIC项目原理图设计

最小板原理图设计 目录 1 菜单与工具使用 2 常用设置 2.1选项卡 2.2 图纸设置 2.3 颜色设置 3 设计技巧 3.1 模块化设计思路 3.2 元件放置 3.3 走线及连接符 4 原理图绘制 4.1 POWER原理图设计 4.2 MCU原理图设计 4.2.1晶振电路 4.2.2复位电路 4.2.3 BOOT电路 …

Windows 11快捷键功能大全 28个Windows 11快捷键功能介绍

Windows 11快捷键功能大全 28个Windows 11快捷键功能介绍 1. WinA 打开快速设置面板2. WinB 快速跳转系统托盘3. WinC 打开Microsoft Teams4. WinD 快速显示桌面5. WinE 打开资源管理器6. WinF 一键提交反馈7. WinG 启动Xbox Game Bar8. WinH 语音听写9. WinI 打开设置10. WinK…

如何正确高效地学习android开发?

每一个能成为行业大佬的人&#xff0c;一定有自己独特的方法… 之所以能成为大佬&#xff0c;是因为他们会有自己独特的见解&#xff0c;在一次次的尝试中不断否定&#xff0c;然后一次次的确定&#xff0c;一个程序员想要精益求精&#xff0c;必须要有高效的学习方法和良好的…

Spring Cloud Alibaba基于Sentinel实现限流降级自定义配置结果

hello&#xff0c;你好呀&#xff0c;我是灰小猿&#xff0c;一个超会写bug的程序员&#xff01; sentinel作为SpringCloudAlibaba的基本组件&#xff0c;在进行熔断、限流、降级等方面具有十分重要的作用&#xff0c;而且其基于Web界面对接口进行限流配置&#xff0c;使得实时…

环形链表II(链表篇)

给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整…