SpringSecurity - WebSecurityConfigurerAdapter 过时问题

项目场景

使用 SpringBoot 版本:2.7.1 集成 Spring-Security

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

首先我们对比一下不同版本 WebSecurityConfigurerAdapter 的注释:

  • SpringBoot 2.3.12.RELEASEspring-security-config-5.3.9.RELEASE
    在这里插入图片描述
  • SpringBoot 2.7.1spring-security-config-5.7.2
    在这里插入图片描述
    Spring 在标注一个类是过时类的时候,同时也给出了新的建议配置方式(上面红框框起来的地方):
  • 使用 SecurityFilterChain Bean 来配置 HttpSecurity
  • 使用 WebSecurityCustomizer Bean 来配置 WebSecurity

这种方式显然更加清晰了,不需要再依赖于一个抽象类提供的通用功能。


配置 HttpSecurity

官方文档提供的 SpringSecurity 架构 中可以知道,Servlet 环境中的 Spring Security 是基于 Servlet Filters 实现的,其中的 FileterChainProxySecurityFilterChain 提供了一系列的 Filter,架构图如下:

在这里插入图片描述

自定义 Filters 配置:

@EnableWebSecurity
public class WebSecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception {
        httpSecurity.authorizeRequests()
                .anyRequest().authenticated()
                .and()
                .formLogin()
                .disable()
                .csrf()
                .disable();
        return httpSecurity.build();
    }
}

配置 WebSecurity

新版本通过配置 WebSecurityCustomizer Bean 来配置 WebSecurity,通过源码,我们可以看到 WebSecurityCustomizer 是一个 consumer 类型的 函数式接口

  • WebSecurityCustomizer
@FunctionalInterface
public interface WebSecurityCustomizer {

	/**
	 * Performs the customizations on {@link WebSecurity}.
	 * @param web the instance of {@link WebSecurity} to apply to customizations to
	 */
	void customize(WebSecurity web);

}

旧的配置为:

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/login");
    }
}

新的配置为:

@EnableWebSecurity
public class WebSecurityConfig {

    @Bean
    public WebSecurityCustomizer webSecurityCustomizer() {
        return web -> web.ignoring().antMatchers("/login");
    }
}

希望大家拥抱变化,升级是为了更好的提供服务,代码的质量把控也是一个渐进过程。毕竟升级也是为了更完美、更清晰的架构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值