(源码分析)springsecurity认证授权

news2024/9/9 5:42:31

了解

1. 结构总览

 SpringSecurity所解决的问题就是安全访问控制,而安全访问控制功能其实就是对所有进入系统的请求进行拦截,校验每个请求是否能够访问它所期望的资源。

根据前边知识的学习,可以通过Filter或AoP等技术来实现,SpringSecurity对web资源的保护是靠Filter实现的,所以从这个Filter来入手,逐步深入SpringSecurity 原理。当初始化SpringSecurity时,会创建一个名为SpringSecurityFilterChain的 Servlet过滤器,类型为org.springframework.security.web.FilterChainProxy,它实现了javax.servlet.Filter,因此外部的请求会经过此类,下图是 Spring Security过虑器链结构图:

 

上图说明:

FilterchainProxy是一个代理,真正起作用的是FilterChainProxy中securityFilterChain所包含的各个Filter,同时这些Filter作为Bean被Spring管理,它们是SpringSecurity核心,各有各的职责,但他们并不直接处理用户的认证,也不直接处理用户的授权,而是把它们交给了认证管理器AuthenticationManager决策管理器AccessDecisionManager。进行处理下图是 FilterChainProxy相关类的UML图示:

 2. 过滤器链中主要的几个过滤器及其作用

2.1 SecurityContextPersistenceFi1ter

这个Filter是整个拦截过程的入口和出口(也就是第一个和最后一个拦截器),会在请求开始时从配置好的 SecurityContextRepesitory中获取SecurityContext,然后把它设置给securityContextHolder。在请求完成后将SecurityContextHolder持有的SecurityContext再保存到配置好的SecurityContextRepository ,同时清除securityContextHolder所持有的SecurityContext。

2.2 UsernamePasswordAuthenticationFilter

用于处理来自表单提交的认证。该表单必须提供对应的用户名和密码,其内部还有登录成功或失败后进行处理的AuthenticationSuccessHandler和AuthenticationFailureHandler,这些都可以根据需求做相关改变。

2.3 FilterSecurityInterceptor

是用于保护web资源的,使用AccessDecisionManager对当前用户进行授权访问。

2.4 ExceptionTranslationFilter

能够捕获来自Filterchain所有的异常,并进行处理。但是它只会处理两类异常:AuthenticationException和 AccessDeniedException,其它的异常它会继续抛出。

3. Spring security 认证工作流程

3.1 认证流程图

 

查询数据库进行比对。

查询用户信息的代码--->UserDetailsService中loadUserByUsername该方法。 我们只需要重写该方法即可。

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

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

相关文章

Sparse Vector Coding稀疏矢量码介绍

需要MATLAB代码的小伙伴请通过微信公众号私信我~ 更多精彩内容请关注微信公众号 ‘优化与算法’ 前言 5G和6G无线通信期望带来更高的频谱效率和能量效率,为了达到这些目标,近年来已经提出了各种新技术。其中,索引调制IM(Index …

「树形结构」基于 Antd 实现一个动态增加子节点+可拖拽的树

效果 如图所示 实现 import { createRoot } from react-dom/client; import React, { useState } from react; import { Tree, Input, Button } from antd; import { PlusOutlined } from ant-design/icons;const { TreeNode } Tree; const { Search } Input;const ini…

优选算法之位运算

目录 一、常见位运算总结 1.基础位运算 2.给定一个数 n,确定它的二进制表示中的第 x 位是 0 还是 1 3.将一个数 n 的二进制表示的第 x 位修改成1 4.将一个数 n 的二进制表示的第 x 位修改成 0 5.提取一个数 n 二进制表示中最右侧的1 6.干掉一个数 n 二进制表示…

分布式存储系统架构及应用

分布式存储系统概述(详细、全面) 【摘要】深度剖析分布式存储系统的可靠性、可用性、IO性能、数据存储效率、安全性及管理性,为寻求了解此领域的读者提供实用参考。 一、 内容总括 分布式存储系统,依托网络互联的多节点软硬件协同…

人脸识别又进化:扫一下 我就知道你得了啥病

未来,扫下你的脸,可能就知道你得啥病了。没在瞎掰,最近的一项研究成果,还真让咱看到了一点眉目。北大的一个研究团队,搞出来一个 AI ,说是用热成像仪扫一下脸,就能检测出有没有高血压、糖尿病和…

工作纪实54-git使用ssh方式

很多居家的小伙伴要重新clone项目,但是忘记了密码,最恶心的是idea还会自动帮你记录密码,如果输错了,会很恶心,使用ssh则不会;还有一个好处就是,集团的密码一般都是几个月更新一次,ss…

基于Frp搭建Window-Linux内网穿透完整流程

什么是内网穿透? 内网穿透是我们在进行网络连接时的一种术语,也叫做NAT穿透,即在计算机是局域网内的时候,外网与内网的计算机的节点进行连接时所需要的连接通信,有时候就会出现内网穿透不支的情况。内网穿透的功能就是&#xff0…

只出现一次的数字-位运算

题目描述&#xff1a; 个人题解&#xff1a; 代码实现&#xff1a; class Solution { public:int singleNumber(vector<int>& nums) {int ret 0;for (auto e: nums) ret ^ e;return ret;} };复杂度分析&#xff1a; 时间复杂度&#xff1a;O(n)&#xff0c;其中 n…

19018 正则序列

这个问题可以通过排序和计数来解决。首先&#xff0c;我们将数组排序&#xff0c;然后我们遍历排序后的数组&#xff0c;对于每个元素&#xff0c;我们将它变为它应该在正则序列中的值&#xff0c;也就是它的索引加1。我们将这个变化的绝对值累加起来&#xff0c;这就是我们需要…

STM32智能农业灌溉系统教程

目录 引言环境准备智能农业灌溉系统基础代码实现&#xff1a;实现智能农业灌溉系统 4.1 数据采集模块 4.2 数据处理与分析模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;农业监测与优化问题解决方案与优化收尾与总结 1. 引言 智能农业灌溉系统通…

Sklearn实例:水果多分类

机器学习五步&#xff1a; 加载数据集分割数据集建立模型训练模型预测模型 导入库文件 import numpy as np #科学计算库 import matplotlib.pyplot as plt #绘图库可视化函数 import pandas as pd #数据处理库&#xff0c;数据分析库 import seaborn as sns #高级数据可视化…

AI技术修复奥运珍贵历史影像,《永不失色的她》再现百年奥运女性光彩

Greatness of HER &#xff01; AI致敬 , 了不起的「她」。 7月25日&#xff0c;在国际奥委会和各方力量的支持下&#xff0c;阿里云以AI技术修复奥运珍贵历史影像&#xff0c;让百年奥运女性的伟大光彩被看见&#xff0c;并在巴黎推出《永不失色的她》全球首映礼。 国际奥委会…

【练习】使用DevEco Studio编写鸿蒙代码,实现卡片效果,主要是练习布局

效果展示 实现代码 build() {Column(){Column(){Image($r("app.media.avatar")).width("100%").borderRadius({topLeft:10,topRight:10})Text("今晚吃这个 | 每日艺术分享 No.43").fontSize(14).fontWeight(600).lineHeight(22).height(60)Row(…

Xlua原理分析 四

前面已经介绍了Xlua的通信原理&#xff0c;这篇主要记录Xlua如何做到Hotfix的。 我们项目就用到Xlua的Hotfix特性&#xff0c;周更用Lua去修改代码。版本内用C#开发。这点我觉得是Xlua比toLua强大的重要特性之一。 如何使用Hotfix本篇不介绍了&#xff0c;看Xlua教程懂得都懂…

网页上空格

&#xA0; no-break space(普通的英文半角空格但不换行) 中文全角空格 (一个中文宽度) &ensp; en空格(半个中文宽度) &emsp; em空格 (一个中文宽度) 四分之一em空格 (四分之一中文宽度) 相比平时的空格()&#xff0c;&nbsp拥有不间断(non-breaking)特性。即连续…

postgresql 您要的日期查询都在这

1、获取当前日期 select now();select current_timestamp;返回值均是当前年月日、时分秒&#xff0c;且秒保留6位小数&#xff0c;两种方式等价 select current_time;返回值&#xff1a;时分秒&#xff0c;秒最高精确到6位 select current_date;返回值&#xff1a;年月日 2…

HarmonyOS 鸿蒙DFX能力简介

DFX简介&#xff1a; Development and Feedback eXchange&#xff08;‌DFX&#xff09;‌&#xff0c;‌用于开发、‌测试和维护鸿蒙应用&#xff0c;提供一系列的工具和功能&#xff0c;‌帮助开发者在开发过程中进行性能分析、‌故障检测、‌异常处理。比如异常处理、性能分…

【qt小系统】传感器云平台3D散点图(附源码)

摘要&#xff1a;本文主要使用QT5&#xff0c;实现了一个传感器云平台的小示例&#xff0c;模拟的是各类传感器的添加&#xff0c;例如&#xff1a;热成像传感器、温度传感器、超声波传感器&#xff0c;模拟添加完成后&#xff0c;会自动将此传感器的三维坐标增加到3D散点图上&…

【每日一篇】UrbanGPT:时空大语言模型 【方便自己看】

摘要 时空预测旨在预测和洞察城市环境在时间和空间上不断变化的动态。它的目的是预测未来的模式&#xff0c;趋势和城市生活的各个方面的事件&#xff0c;包括交通&#xff0c;人口流动和犯罪率。虽然已经有许多努力致力于开发神经网络技术来准确预测时空数据&#xff0c;但重…