返回

从WebSecurityConfigurerAdapter升级,优化Spring Boot 2.7网络安全

后端

升级到 Spring Boot 2.7 中的安全过滤器链:让您的应用程序更安全、更灵活

随着 Spring Boot 2.7 的发布,WebSecurityConfigurerAdapter 已被废弃,取而代之的是更先进的安全过滤器链 (SecurityFilterChain)。这次升级带来了网络安全配置的重大改进,包括更简单的配置、更好的可扩展性和增强的安全性。

升级步骤

要从 WebSecurityConfigurerAdapter 升级到 SecurityFilterChain,只需按照以下步骤操作:

  1. 在您的 pom.xml 文件中添加对 spring-security-web 模块的依赖:
<dependency>
  <groupId>org.springframework.security</groupId>
  <artifactId>spring-security-web</artifactId>
  <version>5.7.2</version>
</dependency>
  1. 在您的 Java 代码中,创建一个 SecurityFilterChain bean:
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
  http
    .authorizeRequests()
    .antMatchers("/admin/**").hasRole("ADMIN")
    .anyRequest().authenticated()
    .and()
    .formLogin()
    .and()
    .httpBasic();

  return http.build();
}
  1. 在您的应用程序类中,添加以下代码以启用 SecurityFilterChain:
@EnableWebSecurity
public class YourApplication extends SpringBootServletInitializer {
  // ...
}

升级后,您的应用程序将使用 SecurityFilterChain 进行安全配置,从而受益于其众多优势。

优势

更简单的配置

SecurityFilterChain 的语法更加简洁易懂,使您可以更轻松地配置应用程序的安全设置。与 WebSecurityConfigurerAdapter 相比,它减少了样板代码,并允许您以更直观的方式定义安全规则。

更好的可扩展性

SecurityFilterChain 允许您更轻松地添加和移除安全过滤器,使您的应用程序更具可定制性和灵活性。您可以使用 Spring Security 提供的过滤器或创建自己的过滤器来满足您的特定需求。

增强的安全性

SecurityFilterChain 集成了最新的安全最佳实践,帮助您更好地保护应用程序免受攻击。它提供开箱即用的攻击防护,例如跨站点请求伪造 (CSRF) 保护和点击劫持保护。

结论

从 WebSecurityConfigurerAdapter 升级到 SecurityFilterChain 是 Spring Boot 2.7 中的必备之选。它提供了更简单、更灵活、更安全的网络安全配置,让您的应用程序更具弹性和可定制性。赶快升级您的应用程序,以享受这些好处,为您的用户提供无缝且安全的体验。

常见问题解答

1. 我可以使用 SecurityFilterChain 与旧版本的 Spring Security 吗?

不,SecurityFilterChain 仅适用于 Spring Security 5.7.2 及更高版本。

2. 我需要重新编写整个安全配置吗?

不,升级过程相对简单。您可以按照本指南中的步骤操作,只需少量代码更改即可。

3. SecurityFilterChain 比 WebSecurityConfigurerAdapter 更安全吗?

是的,SecurityFilterChain 集成了最新的安全最佳实践,为您提供更好的保护免受攻击。

4. SecurityFilterChain 支持哪些安全过滤器?

SecurityFilterChain 支持广泛的安全过滤器,包括表单登录、HTTP 基本身份验证、JWT 身份验证和 OAuth2 身份验证。

5. 如何自定义 SecurityFilterChain?

您可以使用 Spring Security 提供的自定义配置 API 或创建自己的安全过滤器来自定义 SecurityFilterChain。