SpringSecurity原理学习——源码解读——WebsecurityConfigurerAdapter

本文深入剖析SpringSecurity的核心组件WebSecurityConfigurerAdapter。通过整体把握该类的作用,理解其作为WebSecurityConfigurer接口适配器的配置功能。主要关注init方法,它初始化http实例并设置securityFilterChainBuilders;getHttp方法,用于添加SecurityConfigurer实现类;以及configure(HttpSecurity http)方法,用于进一步定制安全配置。重点讨论了ExpressionUrlAuthorizationConfigurer和FormLoginConfigurer的角色,以及它们如何创建重要的FilterSecurityInterceptor和UsernamePasswordAuthenticationFilter。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WebSecurityConfigurerAdapter类

一般而言,我们在使用SpringSecurity的时候,都是通过集成WebSecurityConfigurerAdapter类,重写其中的相关方法 - 一般是configurer(Httpsecurity Http)方法来自定义我们的配置;所以在学习SpringSecurity的时候,我们首先通过这个类进行分析,一步步进行深入,慢慢了解我们在这个类中配置了什么,以及这些配置是怎在我们的春季应用启动的时候起作用的;(关于SpringSecurity框架的基本原理还不清楚的同学可以先看一下第一篇文章--SpringSecurity框架的基本原理

在对源码分析之前,我们首先应该大概了解一下WebSecurityConfiguerAdapter这个类的作用和其中的主演方法-这是必要的,否则直接开始的源码分析将会使得对这个类完全不了解的同学陷入一团乱粥中,在你看完源码分析之后完全不知道讲了什么,甚至再多看几遍也是同样的效果,这不是我这个讲解者和诸位学习者想看到的结果 - 因为我在学习的时候就曾陷入过这样的窘境,毕竟接受一件新的事物总是很困难的,更何况是盲人摸象;所以从这篇文章开始,我对SpringSecurity原理的源码分析讲解的过程中,都会特别注意两件事情- 总体把握和理解顺序 ;在这个过程中我对于框架原理的讲解顺序可能会和网上其他的文章中的顺序不同,但是,读者始终应该明白的一点是-我选择的讲解顺序将会使得你在学习的过程中不会因为对某个地方存在疑惑而导致 法继续之后的内容-而是在顺序读完文章之后便对这个框架有了基本的认识,也就是说,从这个文章中获取到了文章本来想要说明的东西,因此,读者在阅读后续文章的时候应该首先明白现在所说的东西;

nowwego! -

整体把握:

WebSecurityConfigureAdapter类首先从类名来看,这是一个适配器(不理解Java适配器的同学可以参考我的这篇文章 - Java适配器的使用方式详解),WebSecurityConfigurer接口的适配器,我们知道的是编程思想中很重要的一点就是标识符要做到见名知意,而且我们应该相信SpringSecurity编写者拥有这样的意识和水平-所以这点在我们以后的学习中应该特别注意到,学会解读名称-无论是接口,类名还是变量名,通过它的名称对其功能有一个先入为主的大致了解或者猜想对于我们在阅读代码的过程中是十分重要的;所以我们现在应该知道的是,WebSecurityConfigurerAdapter类是一Websecurityconfigurer接口的一个适配器,而这个类的功能主要是起配置作用;

而其实呢,

首先,WebSecurityConfigureAdapter类中

这个类中主要的是上面的三个方法,
*1 init方法做了两件事,一个就是调用getHttp()方法获取一个http实例,并通过web.addSecurityFilterChainBuilder方法把获取到的实例赋值给WebSecurity的securityFilterChainBuilders属性,这个属性在我们执行build的时候会用到,第二个就是为WebSecurity追加了一个postBuildAction,在build都完成后从http中拿出FilterSecurityInterceptor对象并赋值给WebSecurity。
*2 getHttp()方法,这个方法在当我们使用默认配置时(大多数情况下)会为我们追加各种SecurityConfigurer的具体实现类到httpSecurity中,如exceptionHandling()方法会追加一个ExceptionHandlingConfigurer,sessionManagement()方法会追加一个SessionManagementConfigurer,securityContext()方法会追加一个SecurityContextConfigurer对象,这些SecurityConfigurer的具体实现类最终会为我们配置各种具体的filter,这些SecurityConfigurer类是怎么调用到的,下面会讲到
另外getHttp()方法的最后会调用configure(http),这个方法也是我们继承WebSecurityConfigurerAdapter类后最可能会重写的方法
* 3 configure(HttpSecurity http)方法,默认的配置(HttpSecurity http)方法继续向httpSecurity类中追加SecurityConfigurer的具体实现类,如authorizeRequests()方法追加一个ExpressionUrlAuthorizationConfigurer,formLogin()方法追加一个FormLoginConfigurer。
其中ExpressionUrlAuthorizationConfigurer这个实现类后面会进一步探讨,因为他会给我们创建一个非常重要的对象FilterSecurityInterceptor对象,FormLoginConfigurer对象比较简单,但是也会为我们提供一个在安全认证过程中经常用到会用的一个过滤器:UsernamePasswordAuthenticationFilter
以上三个方法就是WebSecurityConfigurerAdapter类中的init方法的主要逻辑,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值