使用 SpringBoot 版本:2.7.1 集成 Spring-Security
org.springframework.boot spring-boot-starter-security
首先我们对比一下不同版本 WebSecurityConfigurerAdapter 的注释:
- SpringBoot 2.3.12.RELEASE 中 spring-security-config-5.3.9.RELEASE
- SpringBoot 2.7.1 中 spring-security-config-5.7.2.RELEASE
Spring 在标注一个类是过时类的时候,同时也给出了新的建议配置方式(上面红框框起来的地方): - 使用 SecurityFilterChain Bean 来配置 HttpSecurity
- 使用 WebSecurityCustomizer Bean 来配置 WebSecurity
这种方式显然更加清晰了,不需要再依赖于一个抽象类提供的通用功能。
配置 HttpSecurity
从 官方文档提供的 SpringSecurity 架构 中可以知道,Servlet 环境中的 Spring Security 是基于 Servlet Filters 实现的,其中的 FileterChainProxy 由 SecurityFilterChain 提供了一系列的 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 {
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");
}
}
希望大家拥抱变化,升级是为了更好的提供服务,代码的质量把控也是一个渐进过程。毕竟升级也是为了更完美、更清晰的架构



