Spring Security的基本组件

news2024/11/24 6:33:59

一.简介

Spring Security通过一些列的过滤器完成了用户身份认证及其授权工作,每个过滤器都有不同分工,当然这些过滤器并不是全部都一起工作,而是根据我们需要什么功能,才会选取对应的过滤器加入。

当然这些过滤器并不是直接加入web的过滤器中,而是通过一个过滤器代理完成。web过滤器中只会加入一个或多个过滤器代理,然后由这些代理负责管理哪些Security Filter需要加入进来。如下图所示:
在这里插入图片描述
如果有多个过滤器链代理的话,那么就会变成这样,截图如下:
在这里插入图片描述

二.组件介绍

2.1 Authentication(Principal)

封装用户身份信息,顶层接口,主要实现如下:

AbstractAuthenticationToken()
1. RememberMeAuthenticationToken rememberMe 登陆后封装的身份信息。
2. UsernamePasswordAuthenticationToken 用户名密码登录后封装的身份信息。

2.2 AuthenticationManager

身份认证器的代理,主要负责多个认证器的代理,管理多个AuthenticationProvider,主要实现如下:

ProviderManager (authenticate)

2.3 AuthenticationProvider

真正实现认证工作,多个provider受AuthenticationManager管理,主要实现如下:

AbstractUserDetailsAuthenticationProvider
1. DaoAuthenticationProvider
2. RememberMeAuthenticationProvider

2.4 UserDetailsService

负责定义用户信息的来源,从不同来源加载用户信息,唯一的方法:loadUserByUsername,主要实现类:

UserDetailsManager
1. InMemoryUserDetailsManager
2. JdbcUserDetailsManager

自定义

2.5 UserDetails

定义用户身份信息,比Authentication 信息更详细,主要实现:

User
一般我们自定义

2.6 SecurityContextHolder

存放和获取用户身份信息的帮助类

2.7 FilterChainProxy

Spring Securty Filter的入口,FilterChainProxy管理多个filter

2.8 AbstractHttpConfigurer

构建所有过滤器的核心组件,主要方法init()和configure(),主要实现类:

FormLoginConfigurer
CorsConfigurer
CsrfConfigurer
HttpBasicConfigurer
LogoutConfigurer ...

三.一图理清基本组件关系

在这里插入图片描述

《肖申克的救赎》

生命可以归结为一种简单的选择:要么忙于生存,要么赶着去死。

懦怯囚禁人的灵魂,希望可以感受自由。强者自救,圣者渡人。

希望是件美丽的东西,也许是最好的东西。美好的东西是永远不会死的。

每个人都是自己的上帝。如果你自己都放弃自己了,还有谁会救你?

《熔炉》

我们一路奋战,不是为了能改变世界,而是为了不让世界改变我们。

现实如水母,看似美好无害实质总是致命伤人。

我们来到世界上,都是孤独的旅行,即使身边有人相伴,最终也会各奔东西!

世界上最美丽最珍贵的,反而是听不见且看不清的,只有用心才能感受得到。

《教父》

人可以不断犯错,但绝不能犯要命的错。

不要憎恨你的敌人,那会影响你的判断力。

人并非生来就伟大,而是越活越伟大。

《活着》

人是为了活着本身而活着,而不是为了活着之外的任何事物而活着。

以笑的方式哭,在死亡的伴随下活着。

没有什么比时间更具有说服力了,因为时间无需通知我们就可以改变一切。

你的命是爹娘给的,你不要命了也得先去问问他们。

《我不是药神》

世界上只有一种病,穷病,这种病你没法治,你也治不过来。

人间最高贵的是善良,是对生命的致敬。

《指环王》

把手握紧,里面什么也没有;把手放开,你得到的是一切。

我宁愿和你共度凡人短暂的一生,也不愿一个人看尽这世界的沧海桑田。

20.幸福的家庭都是相似的,不幸的家庭各有各的不幸。

或许有一天,人类变得萎缩懦弱,舍弃朋友,断绝友谊,但今天决不会这样。
《饮食男女》

22.人生不能像做菜,把所有的材料都准备好了才下锅。

什么叫做“可惜”啊,要心中有个“惜”字儿,才知道可惜。

其实一家人,住在一个屋檐下,照样可以各过各的日子,可是从心里产生的那种顾忌,才是一个家之所以为家的意义。

《让子弹飞》

世界上本没有路,有了腿便有了路。

如果你活着,早晚都会死;如果你死了,你就永远活着。

赚钱嘛,不寒碜
————————————————
版权声明:本文为CSDN博主「刘德华一不小心就打代码」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_40991408/article/details/129711994

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

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

相关文章

Linux 终端特殊符号含义大全

Linux特殊符号使用及含义 总结 Linux 终端中有许多特殊符号,本文对常用的进行了总结: $ 表示变量/普通终端用户:用于引用变量的值/表示终端中的普通用户。# 表示注释/超级用户:用于在脚本中注释代码/表示终端中的超级用户。/ &…

Doxygen 源码分析: QCString类

2023-05-20 23:41:56 ChrisZZ imzhuofoxmailcom Hompage https://github.com/zchrissirhcz 文章目录 1. Doxygen 版本2. QCString 类概览3. QCString 特殊成员函数3.1 default 方式的构造函数3.2 单个参数和两个参数的构造函数 4. inline方式实现的成员函数4.1 operator 函数4.…

chatgpt赋能Python-pythonguanwang

Python官网SEO分析 Python是一种高级编程语言,被广泛应用于Web开发、数据科学、人工智能、机器学习等领域。Python官网(https://www.python.org)是Python语言的官方网站,为Python用户和开发者提供了最新的Python解释器、文档、库…

中文Python(5)中文Python的while条件循语句

中文Python(5)中文Python的while条件循语句 Python是一种流行的编程语言,其简单而直观的语法吸引了很多人学习和使用。中文Python则是针对中文用户开发的一种版本。中文Python原先为了给不懂编写程序的人写量化程序,我们开发了中…

代码随想录算法训练营 Day 43 | 1049.最后一块石头的重量 II,494.目标和,474.一和零

1049.最后一块石头的重量 II 讲解链接:代码随想录-1049.最后一块石头的重量 II 确定 dp 数组以及下标的含义:dp[j]表示容量(这里说容量更形象,其实就是重量)为 j 的背包,最多可以背最大重量为 dp[j]。 石…

XPath语法:在XML文档中定位和选择节点的利器

XPath(XML Path Language)是一种用于在XML文档中定位和选择节点的语言。它提供了强大的定位和选择能力,使开发人员能够准确、灵活地定位所需的元素。本篇博客将介绍XPath的语法和常用定位方法,帮助你在Web自动化测试等场景中更好地…

Glob 文件匹配

前言 glob本质是Unix shell 风格的路径匹配规则。 该规则后续被其它语言支持。 ?:匹配一个任意字符 *:匹配任意个任意字符 [sequence]:匹配出现在sequence里面的一个字符 [!sequence]:匹配没有出现在sequence里面的一个字符 [a…

【解决】CSS下拉菜单不会显示的问题

导航栏的下拉菜单显示,但按 F5 刷新的一瞬间又能看见 下拉菜单的内容,但就是不会显示出来,一开始以为是 js 代码写错或者 css 的动画函数的影响,后面找到一篇博客,说这是老生常谈的问题,对于小白确实很难找…

移动应用数据安全性:如何防止应用程序被黑客攻击和数据泄露?

第一章:引言 在移动应用成为人们生活中不可或缺的一部分的今天,数据安全性已经成为一个非常重要的问题。随着黑客攻击和数据泄露事件的频繁发生,用户对于移动应用程序的信任度也在逐渐下降。本文将探讨移动应用数据安全性的重要性&#xff0…

chatgpt赋能Python-pythongpu加速

Python GPU加速:让你的Python应用飞速运行 介绍 Python是一种高级编程语言,具有易于学习、易于使用和强大的功能。作为一门解释型语言,Python会在运行时逐行解释程序代码,而这种解释方式会导致Python在运行速度上较慢。在需要大…

2023上半年软考系统分析师科目一整理-01

2023上半年软考系统分析师科目一整理-01 1. 面向对象2. UML 1. 面向对象 面向对象分析中,对象是类的实例。对象的构成成分包含了(A),属性和方法(或操作)。 A.标识 B.消息 C.规则 D.结构 对象的三要素为&am…

linux服务器安装python环境配置

linux服务器安装python环境配置 服务器跳板机服务器配置配置anaconda环境安装其他python版本卸载anaconda root用户为用户添加权限其他工具Jupyter Noetbooktmux 服务器跳板机 跳板机是一个可以从公共网络访问的服务器,它允许用户通过 SSH 连接进入私有网络中的其他…

AI绘画-Midjourney基础2-创意之旅启航:超强二次元风格模型 niji 5

niji 模型是 mj 的一种模型,可以生成二次元风格的图片。 在控制台输入 /settings 指令,进入设置页面。 选择第二行的 Niji version 5 模型,就可以创作二次元风格的图片了! niji 5 模型还有 expressive、cute、scenic 3种风格可以…

【C++初阶】类与对象(中)之取地址及const取地址操作符重载(了解即可)

👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法 ✈️专栏:C航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&#x1…

chatgpt赋能Python-pythongroup

PythonGroup:提高Python技能和构建社交网络的绝佳平台 PythonGroup是一家致力于为Python编程者提供高质量资源和社交网络的平台。无论您是新手还是有十年以上的经验,PythonGroup都可以帮助您提高您的技能,增加您的知识和职业发展机会。 Pyt…

t检验与Z检验的区别

在统计学中,假设检验是评估某种特定情况下观察到的数据是否符合假设的一种方法。t检验和Z检验是两种常用的假设检验方法,分别用于比较均值差异以及比例差异。在医学统计中,t检验和Z检验经常被用于研究和比较不同治疗方法的效果,例…

chatgpt赋能Python-pythonfor遍历列表

Python for循环:遍历列表 - 提高您的编程技能 列表是Python编程语言中广泛使用的数据结构。在许多情况下,我们需要遍历列表中的元素。Python中的for循环是一种最常用的遍历列表的方式。在本文中,我们将介绍如何使用Python的for循环语句遍历列…

SSRS rdlc报表之创建报表 一

环境 vs2019 fromwork4.5 第一步 安装rdlc报表插件 vs2019使用rdlc,需要安装扩展插件,扩展→扩展管理→联机,搜索rdlc,安装Microsoft RDLC Report Designer,我在安装过程中,安装了很久都没安装成功&…

一、数据字典介绍

文章目录 一、数据字典介绍1、页面效果2、表设计3、数据分析4、根据页面效果分析数据接口 一、数据字典介绍 何为数据字典?数据字典就是管理系统常用的分类数据或者一些固定数据,例如:省市区三级联动数据、民族数据、行业数据、学历数据等&a…

Spring Boot系列(一):Spring Boot 入门篇

目录 对于学习Java的童鞋来说,可都是有用的博文,也是我悉心选择推荐给大家的。这次为大家带来的系列文章是关于Spring Boot的,Spring Boot对Javaer来说应该是很常用的一个框架。希望这个系列能对大家有用!​编辑 快速入门 总结 …