2023-06-12  阅读(6)
原文作者:发飙的蜗牛咻咻咻~ 原文地址:https://blog.csdn.net/qq_36221788/category_11009647.html

一、一句话概括框架原理

整个框架的核心就是构建一个名字为 springSecurityFilterChain 的过滤器Bean,它的类型是 FilterChainProxy


二、何处开始读源码?

思考

我们知道,程序入口类会自动扫描当前包及其子包下所有的Bean,并进行实例化,那么 在引入一个新的框架,框架中一些定义好的Bean如何注入我们的Spring容器中呢? ,这些包并不能被入口类扫描中。

其实无非就是通过 @Import 引入相关的类。一般在使用 Spring Security 框架时,我们会自定义一个配置类,配置类加上 @EnableWebSecurity 注解,重新启动程序,一个使用了安全框架的项目就起来了,在无任何自定义配置情况下 Spring Security 默认配置了一个登录过滤器链。

加个 @EnableWebSecurity 注解就可以,怎么做到的?

瞅瞅

  • 点击自定义配置类上添加的 @EnableWebSecurity
    @Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
    @Target(value = { java.lang.annotation.ElementType.TYPE })
    @Documented
    @Import({ WebSecurityConfiguration.class,
    		SpringWebMvcImportSelector.class })
    @EnableGlobalAuthentication
    @Configuration
    public @interface EnableWebSecurity {
    
    	/**
    	 * Controls debugging support for Spring Security. Default is false.
    	 * @return if true, enables debug support with Spring Security
    	 */
    	boolean debug() default false;
    }
  • 重点关注 @Import 导入的类 WebSecurityConfiguration ,会发现类中定义了很多Bean

    202306122224263571.png

  • 其中就有我们的核心过滤器springSecurityFilterChain

    @Configuration
    public class WebSecurityConfiguration implements ImportAware, BeanClassLoaderAware {
    	...
    	/**
    	 * Creates the Spring Security Filter Chain
    	 * @return
    	 * @throws Exception
    	 */
    	@Bean(name = AbstractSecurityWebApplicationInitializer.DEFAULT_FILTER_NAME)
    	public Filter springSecurityFilterChain() throws Exception {
    		boolean hasConfigurers = webSecurityConfigurers != null
    				&& !webSecurityConfigurers.isEmpty();
    		if (!hasConfigurers) {
    			WebSecurityConfigurerAdapter adapter = objectObjectPostProcessor
    					.postProcess(new WebSecurityConfigurerAdapter() {
    					});
    			webSecurity.apply(adapter);
    		}
    		return webSecurity.build();
    	}
    	...
    }

找到创建核心过滤器的地方,是不是迫不及待想开始读了?咱们先不急,先来了解整个框架的接口设计,以及各个类的职能。


三、框架接口设计

整个框架主要由 建造者配置器 构成,在服务启动时就是 通过配置器对建造者进行配置 ,配置完成再由建造者创建出核心过滤器。

建造者

  • UML图(方法、属性等自行打开Idea查看,全部打开太占位置没法截图就截了简单的类关系)

    202306122224271562.png

涉及到创建 springSecurityFilterChain 的建造者是 HttpSecurityWebSecurity ,接下来文章介绍,AuthenticationManagerBuilder 先放放,后面讲解如何认证授权时详细介绍。

配置器

  • UML类图

    202306122224276403.png

一般我们会使用底层的两个配置器 WebSecurityConfigurerAdapterAbstractHttpConfigurer ,后续文章详细介绍。

四、总结

  • WebSecurityHttpSecurity 都是 建造者
  • WebSecurity 的构建目标是 FilterChainProxy 对象,即核心过滤器 springSecurityFilterChain
  • HttpSecurity 的构建目标只是 FilterChainProxy 对象中一组 SecurityFilterChain 的一个
  • 配置器 是通过 HttpSecurity 配置进 建造者 中用于构建 SecurityFilterChain

五、系列文章

Spring Security 系列

Spring Security OAuth 系列


Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。

它的内容包括:

  • 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
  • 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
  • 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
  • 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
  • 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
  • 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
  • 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
  • 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw

目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:

想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询

同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。

阅读全文