深入浅出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(五):认证和授权的过程》

  • 6
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值