Spring Security认证授权流程详解

认证的工作原理

过滤链

Spring Security框架的作用就是安全访问控制即对所有进入系统的请求进行拦截, 校验每个请求是否能够访问到它所期望的资源

通过Filter或AOP等技术可以实现安全访问控制功能,而Spring Security对Web资源的保护是靠Filter实现的,Spring Security有一个过滤链

在这里插入图片描述

Spring Security框架中真正起作用的是FilterChainProxy中的SecurityFilterChain所包含的各个Filter

在这里插入图片描述

过滤器功能
SecurityContextPresistenceFilter整个拦截过程的入口和出口即第一个和最后一个拦截器
在请求开始时从配置好的SecurityContextRepository中获取SecurityContext给SecurityContextHolder
在请求完成后将SecurityContextRepository持有的SecurityContext再保存到配置好的SecurityContextRepository,同时清除SecurityContextHolder所持有的SecurityContext
UsernamePasswordAuthenticationFilter处理来自表单提交的认证,要求表单必须提供对应的用户名和密码
其内部还有登录成功或失败后进行处理的AuthenticationSuccessHandler和AuthenticationFailureHandler
FilterSecurityInterceptor用于保护web资源的,使用AccessDecisionManager对当前用户进行授权访问
ExceptionTranslationFilter捕获来自 FilterChain所有的异常并进行处理
它只会处理AuthenticationException和AccessDeniedException这两类异常,其它的异常它会继续抛出

认证流程

Spring Security的执行流程如下

  1. 用户提交的用户名、密码被SecurityFilterChain中的UsernamePasswordAuthenticationFilter过滤器获取到并把其封装到Authentication请求对象中
  2. UsernamePasswordAuthenticationFilter过滤器将Authentication请求对象提交至认证管理器AuthenticationManager进行认证
  3. 认证管理器有个实现类列表List<XxxAuthenticationProvider>负责完成实际认证工作,不同的实现类代表不同的认证方式,如web表单的实现类为DaoAuthenticationProvider,其内部维护着一个UserDetailsService负责从数据库中获取用户信息UserDetails(实体类)
  4. DaoAuthenticationProvider会将用户提交的表单信息和从数据库中查询到的用户信息进行认证比对(如密码比对),如果验证通过会将查询到用户的权限,身份等细节信息填充到提交的Authentication请求对象中
  5. 通过SecurityContextHolder(安全上下文容器)将包含了用户权限,身份等细节信息的Authentication请求对象保存都安全上下文中,方便在业务类中随时获取

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux运维工程师不可或缺的10款工具

运维工程师在日常工作中频繁运用的10款工具&#xff0c;并细致阐述每款工具的功能、适用场景以及其卓越之处。 1. Shell脚本&#xff1a; 功能&#xff1a;主要用于自动化任务和批处理作业。 适用场景&#xff1a;频繁用于文件处理、系统管理、简单的网络管理等操作。 优势&…

【学习教程】Vision Pro:开发学习资源

unity 官方网站上线了一款课程,准备好迎接 Apple Vision Pro:免费学习资源汇总。 本合集则是为想要探索 Apple Vision Pro 的创作者提供全方位指导, 由浅入深,与你一同创造前所未有的 沉浸式空间交互体验 的新奇内容。 合集包含最新的开发技术文档。从入门的基础知识核心…

基于vue的联通积分商城数据可视化APP设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 前端技术介绍 3 1.1 前端开发语言 3 1.1.1 HTML5 3 1.1.2 CSS3 3 1.1.3 JavaScript 3 1.2 MVVM开发模式 4 1.3 Vue框架 4 1.4 Axios技术 5 1.5 ECharts 5 1.6 数据库技术 5 1.7 本章小结 6 2 前端开发的分析 7 2.1 功能性需求分析 7 2.2 …

Navicat连接数据库出现的问题

Navicat使用教程——连接/新建数据库、SQL实现表的创建/数据插入、解决报错【2059-authentication plugin‘caching_sha2_password’……】_2059authentication plugin-CSDN博客

灭火新选择:恒峰便携式森林灭火泵,轻松应对火情

森林中火灾是一种常见且危害巨大的自然灾害。一旦发生&#xff0c;如果没有及时、有效的扑救手段&#xff0c;后果将不堪设想。然而&#xff0c;传统的消防设备往往体积庞大、重量不轻&#xff0c;操作复杂&#xff0c;难以在森林中迅速有效地发挥作用。而现在&#xff0c;我们…

专题一 - 双指针 - leetcode 1089. 复写零 - 简单难度

leetcode 1089. 复写零 leetcode 1089. 复写零 | 简单难度1. 题目详情1. 原题链接2. 基础框架 2. 解题思路1. 题目分析2. 算法原理3. 时间复杂度 3. 代码实现4. 知识与收获 leetcode 1089. 复写零 | 简单难度 1. 题目详情 给你一个长度固定的整数数组 arr &#xff0c;请你将…

大白话说---“消息队列”

目录 一、什么是消息队列&#xff1f; 二、消息队列的作用 1.解耦 2.削峰 3.异步 三、消息队列的使用场景 1.传统设计 2.加入消息队列后的优化 四、常见的消息队列 一、什么是消息队列&#xff1f; 从名称上&#xff0c;我们就可以得到两个关键信息&#xff0c;即“消息”和…

ODI报错

三月 08, 2024 1:20:09 下午 oracle.odi.mapping 信息: Start generation of map physical design: MapPhysicalDesign New_Mapping.物理 三月 08, 2024 1:20:09 下午 oracle.odi.mapping 信息: Finished generation of map physical design: MapPhysicalDesign New_Mapping.物…

Word背景图片设置,提升文章美观度的4个小技巧!

“我才刚开始使用Word&#xff0c;想问问大家Word中背景图片应该怎么设置呢&#xff1f;有什么比较好用的设置方法可以分享一下吗&#xff1f;” 在日常办公中&#xff0c;我们经常需要使用Word来对文件进行处理。在编写Word时&#xff0c;如果给文档加入背景图片&#xff0c;会…

用云手机进行舆情监测有什么作用?

在信息爆炸的时代&#xff0c;舆情监测成为企业和政府决策的重要工具。通过结合云手机技术&#xff0c;舆情监测系统在品牌形象维护、市场竞争、产品研发、政府管理以及市场营销等方面发挥着关键作用&#xff0c;为用户提供更智能、高效的舆情解决方案。 1. 品牌形象维护与危机…

猫冻干价格差距大,定价合理吗?价位合适的主食冻干推荐

随着养猫知识的普及&#xff0c;主食冻干喂养受到越来越多铲屎官的欢迎。然而&#xff0c;价格仍是部分铲屎官的考虑因素。事实上&#xff0c;像我这样的资深铲屎官&#xff0c;早已开始主食冻干喂养。虽然主食冻干价格稍高&#xff0c;但其为猫咪带来的好处是无法替代的。 对于…

【动态规划.2】5292. 跳台阶

承接上一篇 升级版&#xff0c;别怕&#xff0c;上一篇弄会了&#xff0c;这个就是 豆芽菜✌️ https://www.acwing.com/problem/content/description/5295/ f1.递归 #include <bits/stdc.h> // 2024-03-08 Come on ! using namespace std; #define ll long l…

git克隆过程报错

设置 git config 来强制 git 使用 HTTP 1.1 git config --global http.version HTTP/1.1想将其设置回 HTTP2&#xff0c;你可以这样做 git config --global http.version HTTP/2

金相显微镜(金相镜)主要用于材料金相分析 我国市场集中度较低

金相显微镜&#xff08;金相镜&#xff09;主要用于材料金相分析 我国市场集中度较低 金相显微镜又称为金相镜&#xff0c;是指通过光学放大&#xff0c;对材料显微组织、低倍组织和断口组织等进行分析研究和表征的光学显微镜。金相显微镜通常由目镜、物镜、照明系统、旋转台等…

Midjourney绘图欣赏系列(七)

Midjourney介绍 Midjourney 是生成式人工智能的一个很好的例子&#xff0c;它根据文本提示创建图像。它与 Dall-E 和 Stable Diffusion 一起成为最流行的 AI 艺术创作工具之一。与竞争对手不同&#xff0c;Midjourney 是自筹资金且闭源的&#xff0c;因此确切了解其幕后内容尚不…

数据结构与算法第二套试卷大题

1.选择排序&#xff0c;插入排序的思路 1.1选择排序思路&#xff1a; 1.每次在数组中选一个最小的元素与第一个元素进行交换——>2.然后逐步缩小数组&#xff0c;重复第一&#xff0c;二步 1.2举例&#xff1a; 假设有一个无序数组 [5, 2, 8, 3, 1]&#xff0c;使用选择排序…

kasan排查kernel内存越界示例(linux5.18.11)

参考资料&#xff1a; 1&#xff0c;内核源码目录中的Documentation\dev-tools\kasan.rst 2&#xff0c;KASAN - Kernel Address Sanitizer | Naveen Naidu (naveenaidu.dev) 一、kasan实现原理 KASAN&#xff08;Kernel Address SANitizer&#xff09;是一个动态内存非法访…

《JAVA与模式》之模板方法模式

系列文章目录 文章目录 系列文章目录前言一、模板方法模式的结构二、模板方法模式中的方法三、使用场景四、模板方法模式在Servlet中的应用前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了…

RN开发搬砖经验之-如何处理FlashList组件加载后调用scrollToIndex没有滚动指定位置

前言 如题&#xff0c;这里只能说是处理&#xff0c;起正向作用的临时方案&#xff0c;因为我也着实没搞懂这个BUG的具体原因&#xff0c;看github上有提相关的issuesFor long lists with different item types scrollToIndex does not work reliable&#xff0c;但看官方没有…

操盘风控系统的功能设计与实现

文章目录 一、账户信息风控警报系统是什么二、操盘警报风控系统的意义三、风控系统功能参数设置短信通知及邮件通知参数手机远程风控新闻风险控制常规Bug检测、交易纪律控制参数账户净值、手数、单数、盈亏控制参数价格时间风控、定时平仓 一、账户信息风控警报系统是什么 警报…