返回

Spring Security 新旧版本对比:升级指南

Android

升级 Spring Security:从 5.6 到 5.7.1 的全面指南

随着 Spring Boot 2.7.0 的发布,开发人员迎来了备受期待的 Spring Security 5.7.1。此更新带来了令人兴奋的新功能和改进,升级到此最新版本可为您的应用程序提供显著的提升。

1. 认证机制的变化

Spring Security 5.7.1 对基于令牌的认证机制进行了重大升级。它现在支持 JWT (JSON Web 令牌) ,为开发人员提供了更加安全、灵活的认证选项。如果您当前使用基于会话的认证,升级后可以享受 JWT 带来的诸多优势。

代码示例:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
        .antMatchers("/api/**")
        .authenticated()
        .and()
        .oauth2ResourceServer()
        .jwt();
}

2. CSRF 保护增强

跨站点请求伪造 (CSRF) 攻击是网络安全中的一个常见威胁。Spring Security 5.7.1 通过引入一个新的 CSRF 保护机制,显著提高了应用程序的安全性。此机制自动生成和验证 CSRF 令牌,防止恶意请求。

代码示例:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
}

3. WebFlux 集成改进

Spring WebFlux 是一个流行的反应式 Web 框架。Spring Security 5.7.1 极大地改善了与 WebFlux 的集成。它提供了更加简洁、可配置的 API,让您轻松保护 WebFlux 应用程序。

代码示例:

SecurityWebFilterChain springWebFilterChain = SecurityWebFilterChain.fromReactorContext(context);
ServerWebExchangeMatcher matcher = ServerWebExchangeMatchers.pathMatchers("/api/**");
ReactiveSecurityContextWebFilter filter = new ReactiveSecurityContextWebFilter(securityWebFilterChain, matcher);
webFilterChain.filter(filter);

4. 弃用 WebSecurityConfigurerAdapter

WebSecurityConfigurerAdapter 类在 Spring Security 的早期版本中被广泛用于配置安全规则。然而,Spring Security 5.7.1 弃用了此类。它建议使用 WebSecurityCustomizerSecurityFilterChain 代替。

代码示例:

@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/api/**")
                .authenticated()
                .and()
                .oauth2ResourceServer()
                .jwt();
        return http.build();
    }
}

5. 兼容性注意事项

Spring Security 5.7.1 与 Spring Boot 2.7.0 及更高版本兼容。如果您使用较早版本的 Spring Boot,则在升级到 Spring Security 5.7.1 之前需要先升级 Spring Boot。

升级指南

为了确保平滑的升级,请遵循以下步骤:

  1. 检查兼容性: 确保您的应用程序与 Spring Boot 2.7.0 或更高版本兼容。
  2. 升级 Spring Boot: 将 Spring Boot 升级到最新版本。
  3. 迁移认证: 如果使用基于令牌的认证,请迁移到 JWT 认证机制。
  4. 启用 CSRF 保护: 配置新的 CSRF 保护机制以增强安全性。
  5. 集成 WebFlux: 使用改进的集成 API 来保护您的 WebFlux 应用程序(如果适用)。
  6. 弃用 WebSecurityConfigurerAdapter: 改用 WebSecurityCustomizer 和 SecurityFilterChain 来配置安全规则。
  7. 测试和验证: 彻底测试您的应用程序,确保升级后一切正常。

常见问题解答

  • 问:从 Spring Security 5.6 升级到 5.7.1 的最大好处是什么?

    • 答: JWT 认证、增强的 CSRF 保护和与 Spring WebFlux 的改进集成。
  • 问:JWT 认证比基于会话的认证有哪些优势?

    • 答: 安全性更高、灵活性更强,可用于无状态应用程序。
  • 问:如何配置 Spring Security 5.7.1 中新的 CSRF 保护机制?

    • 答: 使用 CookieCsrfTokenRepository.withHttpOnlyFalse() 方法。
  • 问:弃用 WebSecurityConfigurerAdapter 意味着什么?

    • 答: 它被认为是过时的,建议改用 WebSecurityCustomizer 和 SecurityFilterChain。
  • 问:升级到 Spring Security 5.7.1 时需要特别注意什么?

    • 答: 兼容性问题,例如确保您的应用程序与 Spring Boot 2.7.0 或更高版本兼容。