深入浅出Spring Security(四):WebSecurity与HttpSecurity

上篇回顾

前面我们已经分析了Spring Security的核心过滤器FilterChainProxy的创建和运行过程,认识了建造者配置器的作用。

现在我们知道WebSecurity作为一个建造者就是用来创建核心过滤器FilterChainProxy实例的。

WebSecurity在初始化的时候会扫描WebSecurityConfigurerAdapter配置器适配器的子类(即生成HttpSecurity配置器)。

所有的配置器会被调用init();configure();初始化配置,其中生成的每个HttpSecurity配置器都代表了一个过滤器链。

本篇要说的就是HttpSecurity作为一个建造者,是如何去建造出SecurityFilterChain过滤器链实例的!

PS:如果有多个WebSecurityConfigurerAdapter配置器适配器的子类,会产生多个SecurityFilterChain过滤器链实例。Spring Security Oauth2的拓展就是这么做的,有机会再介绍

spring security 怎么创建的过滤器

我们已经知道了springSecurityFilterChain(类型为FilterChainProxy)是实际起作用的过滤器链,DelegatingFilterProxy起到代理作用。

我们创建的MySecurityConfig继承了WebSecurityConfigurerAdapterWebSecurityConfigurerAdapter就是用来创建过滤器链,重写的configure(HttpSecurity http)的方法就是用来配置HttpSecurity的。

protected void configure(HttpSecurity http) throws Exception {
        http
            .requestMatchers() // 指定当前`SecurityFilterChain`实例匹配哪些请求
                .anyRequest().and()
            .authorizeRequests() // 拦截请求,创建FilterSecurityInterceptor
                .anyRequest().authenticated() // 在创建过滤器的基础上的一些自定义配置
                .and() // 用and来表示配置过滤器结束,以便进行下一个过滤器的创建和配置
            .formLogin().and() // 设置表单登录,创建UsernamePasswordAuthenticationFilter
            .httpBasic(); // basic验证,创建BasicAuthenticationFilter
}

上面的configure(HttpSecurity http)方法内的配置最终内容主要是Filter的创建。

http.authorizeRequests()http.formLogin()http.httpBasic()分别创建了ExpressionUrlAuthorizationConfigurerFormLoginConfigurerHttpBasicConfigurer。在三个类从父级一直往上找,会发现它们都是SecurityConfigurer建造器的子类。SecurityConfigurer中又有configure()方法。该方法被子类实现就用于创建各个过滤器,并将过滤器添加进HttpSecurity中维护的装有Filter的List中,比如HttpBasicConfigurer中的configure方法,源码如下:

HttpSecurity作为建造者会把根据api把这些配置器添加到实例中

HttpBasicConfigurer

getOrApply

apply

这些配置器中大都是创建了相应的过滤器,并进行配置,最终在HttpSecurity建造SecurityFilterChain实例时放入过滤器链

configure()


《深入浅出Spring Security(一):三句话解释框架原理》

《深入浅出Spring Security(二):FilterChainProxy的创建过程》

《深入浅出Spring Security(三):FilterChainProxy的运行过程》

《深入浅出Spring Security(四):详解WebSecurity与HttpSecurity》

《深入浅出Spring Security(五):认证和授权的过程》

原创文章 95 获赞 219 访问量 29万+

猜你喜欢

转载自blog.csdn.net/zimou5581/article/details/102457937