【第四篇】SpringSecurity的HttpSecurity详解

SpringSecurity的XML文件配置

在配置文件中通过 security:http 等标签来定义了认证需要的相关信息

SpringSecurity的HttpSecurity配置

在SpringBoot项目中,脱离了xml配置文件的方式,在SpringSecurity中提供了HttpSecurity等工具类,这里HttpSecurity就等同于在配置文件中定义的http标签。

image.png

  通过代码结果来看和配置文件的效果是一样的。基于配置文件的方式是通过标签对应的handler来解析处理的,HttpSecurity这块是如何处理的呢?接下来详细分析下。

HttpSecurity的类图结构

image.png

  可以看出HttpSecurity的类图结构相对比较简单,继承了一个父类,实现了两个接口

1.SecurityBuilder接口

  SecurityBuilder接口通过字面含义可以发现这是一个创建对象的工具类。

public interface SecurityBuilder<O> {

	/**
	 * Builds the object and returns it or null.
	 * @return the Object to be built or null if the implementation allows it.
	 * @throws Exception if an error occurred when building the Object
	 */
	O build() throws Exception;

}

通过源码可以看到在SecurityBuilder中提供了一个build()方法。在接口名称处声明了一个泛型,而build()方法返回的正好是这个泛型的对象,也就是SecurityBuilder会创建指定类型的对象。结合HttpSecurity中实现SecurityBuilder接口时指定的泛型可以看出创建的具体对象是什么类型。

image.png

  可以看出SecurityBuilder会通过build方法创建一个DefaultSecurityFilterChain对象。也就是拦截请求的那个默认的过滤器链对象。

image.png

然后进入到doBuild()方法,会进入到AbstractConfiguredSecurityBuilder中的方法

@Override
	protected final O doBuild() t

相关推荐

  1. HttpSecurity

    2024-06-13 06:18:03       31 阅读
  2. 【第二SpringSecurity源码详解

    2024-06-13 06:18:03       30 阅读
  3. 【第一SpringSecurity入门

    2024-06-13 06:18:03       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-13 06:18:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-13 06:18:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-13 06:18:03       82 阅读
  4. Python语言-面向对象

    2024-06-13 06:18:03       91 阅读

热门阅读

  1. PHP框架详解 - symfony框架

    2024-06-13 06:18:03       27 阅读
  2. Mysql union语句

    2024-06-13 06:18:03       31 阅读
  3. 苹果宣布iOS18开始深度集成AI

    2024-06-13 06:18:03       32 阅读
  4. Axios 二次封装详解

    2024-06-13 06:18:03       40 阅读
  5. vscode不能进行go跳转

    2024-06-13 06:18:03       42 阅读