(十四)springboot实战——spring securtity安全框架原理之启动流程

前言

本节内容主要介绍spring securtity的初始化启动流程,spring security是通过@EnableWebSecurity注解来启用的,在@EnableWebSecurity注解中主要引入了WebSecurityConfiguration、SpringWebMvcImportSelector、OAuth2ImportSelector、HttpSecurityConfiguration四大组件来完成spring securtity安全框架的初始化。我们这里会主要着重介绍WebSecurityConfiguration组件和HttpSecurityConfiguration组件,这俩个组件是完成spring security的初始化启动的核心组件。

正文

@EnableWebSecurity注解中会启用四大初始化组件

WebSecurityConfiguration:核心是加载spring securtity的过滤器链springSecurityFilterChain

SpringWebMvcImportSelector:在spring中启动web mvc功能

OAuth2ImportSelector:是用于启用 OAuth2 认证和授权功能

HttpSecurityConfiguration:配置安全规则、访问权限、认证方式等

WebSecurityConfiguration组件分析

①创建一个后置处理器RsaKeyConversionServicePostProcessor的bean对象,用于加密

②创建一个DelegatingApplicationListener监听器,用于将该事件委托于其它监听器处理

③这里主要是初始化SecurityFilterChain中的过滤器,默认有14个

④创建一个AutowiredWebSecurityConfigurersIgnoreParents,自动装配自己的Web 安全配置,不受父容器的影响

⑤注入setFilterChainProxySecurityConfigurer组件,用于初始化SecurityConfigurer和webSecurity

⑥初始化springSecurityFilterChain过滤器链,用于处理web请求的安全认证

⑦创建SecurityExpressionHandler处理器,用于在访问控制表达式中处理安全性表达式,主要用来实现权限授权的处理

 HttpSecurityConfiguration组件分析

①创建一个HttpSecurity对象,用于定义Web 应用程序的安全性规则,这里会使用一些默认配置

②初始化一个认证管理器,默认是内存级别的,一般使用的会使用数据库的方式

 SecurityFilterAutoConfiguration配置类分析

如果容器中存在springSecurityFilterChain过滤器,将该过滤器链注册到DelegatingFilterProxyRegistrationBean这个代理注册器Bean中,方便后续取用

 DelegatingFilterProxyRegistrationBean代理注册器分析

①在web容器启动后,会初始化ServletContext的上下文对象

②在初始化上下文时,会调用DelegatingFilterProxyRegistrationBean代理注册器的getFilter()方法,初始化创建DelegatingFilterProxy对象,并将springSecurityFilterChain的bean名称传给DelegatingFilterProxy过滤器代理类

DelegatingFilterProxy 分析

①获取springSecurityFilterChain的bean对象,

②将Spring Security的过滤器委派给此Bean处理

③调用spring security 委派的代理过滤器FilterChainProxy

④获取spring security过滤器

⑤挨个执行spring security过滤器的doFilter方法

结语

关于spring securtity安全框架原理之启动流程的内容到这里就结束了,我们下期见。。。。。。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

存算一体:架构创新,打破算力极限

1 需求背景 在全球数据量呈指数级暴涨,算力相对于AI运算供不应求的现状下,存算一体技术主要解决了高算力带来的高能耗成本矛盾问题,有望实现降低一个数量级的单位算力能耗,在功耗敏感的百亿级AIoT设备上、高能耗的数据中心、自动驾…

NLP_循环神经网络(RNN)

文章目录 RNN结构RNN实战RNN小结 RNN结构 NPLM 在处理长序列时会面临一些挑战。首先,由于它仍然是基于词的模型,因此在处理稀有词汇或者词汇表外的词汇时效果不佳。其次,NPLM不能很好地处理长距离依赖关系。而上面这两个局限,恰恰…

Cookie、Session、Token、JWT的区别

文章目录 概述什么是认证(Authentication)什么是授权(Authorization)什么是凭证(Credentials)Cookiecookie 重要的属性 Sessionsession 认证流程: Cookie 和 Session 的区别TokenRefresh Token …

进程优先级、切换、调度

1. 进程优先级 当多个进程等待访问资源,需要排队,所以优先级可以确定访问资源的先后顺序。有优先级的原因就是资源狼多肉少。 在linux中优先级的本质也就是task_struct中一个整型字段(PRI),默认值是80,并且范围是[60,…

【蓝桥杯冲冲冲】[NOIP2017 提高组] 宝藏

蓝桥杯备赛 | 洛谷做题打卡day29 文章目录 蓝桥杯备赛 | 洛谷做题打卡day29[NOIP2017 提高组] 宝藏题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1样例 #2样例输入 #2样例输出 #2提示题解代码我的一些话[NOIP2017 提高组] 宝藏 题目背景 NOIP2017 D2T2 题目描…

spring cloud stream

背景 主要解决不同消息中间件切换问题。实现不同中间件的代码解耦。 链接: 支持的中间件 后文使用kafka测试。 引入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-stream</artifactId></depende…

如何实现Vuex本地存储

在前端开发中&#xff0c;Vuex是一款非常强大的状态管理工具&#xff0c;但是默认情况下&#xff0c;Vuex的数据是存储在内存中的&#xff0c;刷新页面后数据将会丢失。这往往会导致用户在刷新页面后需要重新登录等繁琐的操作。本篇文章将教会您如何实现Vuex的本地存储&#xf…

华为配置访客接入WLAN网络示例(MAC优先的Portal认证)

配置访客接入WLAN网络示例&#xff08;MAC优先的Portal认证&#xff09; 组网图形 图1 配置WLAN MAC优先的Portal认证示例组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件 业务需求 某企业为了提高WLAN网络的安全性&#xff0c;采用MAC优先的外置Portal认…

利用k8s Infra 容器,解决pod网络故障注入的问题

目录 一、infra容器作用 二、pod网络故障注入问题 三、充分利用pod infra容器 一、infra容器的作用 我们知道&#xff0c;在kubernetes中&#xff0c;pod中容器的资源隔离主要通过namespace和cgroup来实现。那如果我们需要为pod中的容器共享某种资源应该怎么做。kubernetes …

uniapp小程序端使用计算属性动态绑定style样式踩坑

踩坑点: 使用uniapp编译小程序端动态绑定复杂style使用计算属性方式&#xff0c;return必须返回json字符串格式&#xff0c;不能返回object&#xff0c;否则会不起作用。 代码总览 视图层 逻辑层&#xff08;注意这里是使用的计算属性哈&#xff09; 这里我封装成了一个个性化…

Win32 SDK Gui编程系列之--弹出式菜单

1.弹出式菜单 例如,在命令提示窗口中点击鼠标右键,会出现如下图所示的弹出菜单(下拉菜单)。 这种弹出式菜单的实现很简单。不创建菜单栏,用CreatePopupMenu函数创建的菜单是最顶端的菜单就可以了。 菜单的显示使用TrackPopupMenu函数进行。 例如,点击鼠标右键显示弹出…

12.0 Zookeeper 数据同步流程

在 Zookeeper 中&#xff0c;主要依赖 ZAB 协议来实现分布式数据一致性。 ZAB 协议分为两部分&#xff1a; 消息广播崩溃恢复 消息广播 Zookeeper 使用单一的主进程 Leader 来接收和处理客户端所有事务请求&#xff0c;并采用 ZAB 协议的原子广播协议&#xff0c;将事务请求…