升级至Spring Security 6.0:替换已移除/废弃的请求安全配置方法
Spring Boot 3.0 + Spring Security 6.0 安全配置升级方案
关键API替换说明
@EnableGlobalMethodSecurity → @EnableMethodSecurity
Spring Security 6.0 移除了@EnableGlobalMethodSecurity,改用@EnableMethodSecurity。该注解默认开启prePostEnabled=true,无需额外配置,若需显式指定也可保留参数。authorizeRequests() → authorizeHttpRequests()
原请求授权配置方法authorizeRequests()已废弃,替换为authorizeHttpRequests(),用于定义HTTP请求的安全规则。antMatchers() → requestMatchers()
原路径匹配方法antMatchers()被移除,改用requestMatchers(),支持相同的路径匹配语法(如/token/**)。
修改后的完整安全配置代码
package org.sid.securityservice.config; import com.nimbusds.jose.jwk.JWK; import com.nimbusds.jose.jwk.JWKSet; import com.nimbusds.jose.jwk.RSAKey; import com.nimbusds.jose.jwk.source.ImmutableJWKSet; import com.nimbusds.jose.jwk.source.JWKSource; import com.nimbusds.jose.proc.SecurityContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.ProviderManager; import org.springframework.security.authentication.dao.DaoAuthenticationProvider; import org.springframework.security.config.Customizer; import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.oauth2.jwt.JwtDecoder; import org.springframework.security.oauth2.jwt.JwtEncoder; import org.springframework.security.oauth2.jwt.NimbusJwtDecoder; import org.springframework.security.oauth2.jwt.NimbusJwtEncoder; import org.springframework.security.provisioning.InMemoryUserDetailsManager; import org.springframework.security.web.SecurityFilterChain; @Configuration @EnableWebSecurity @EnableMethodSecurity(prePostEnabled = true) // 替换原@EnableGlobalMethodSecurity public class SecurityConfig { private final RsakeysConfig rsakeysConfig; private final PasswordEncoder passwordEncoder; public SecurityConfig(RsakeysConfig rsakeysConfig, PasswordEncoder passwordEncoder) { this.rsakeysConfig = rsakeysConfig; this.passwordEncoder = passwordEncoder; } @Bean public AuthenticationManager authenticationManager(UserDetailsService userDetailsService){ var authProvider = new DaoAuthenticationProvider(); authProvider.setPasswordEncoder(passwordEncoder); authProvider.setUserDetailsService(userDetailsService); return new ProviderManager(authProvider); } @Bean public UserDetailsService inMemoryUserDetailsManager(){ return new InMemoryUserDetailsManager( User.withUsername("user1").password(passwordEncoder.encode("1234")).authorities("USER").build(), User.withUsername("user2").password(passwordEncoder.encode("1234")).authorities("USER").build(), User.withUsername("admin").password(passwordEncoder.encode("1234")).authorities("USER","ADMIN").build() ); } @Bean public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception { return httpSecurity .csrf(csrf -> csrf.disable()) // 替换authorizeRequests为authorizeHttpRequests,antMatchers为requestMatchers .authorizeHttpRequests(auth -> auth .requestMatchers("/token/**").permitAll() .anyRequest().authenticated()) .sessionManagement(sess -> sess.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) .oauth2ResourceServer(oauth2 -> oauth2.jwt(Customizer.withDefaults())) .httpBasic(Customizer.withDefaults()) .build(); } @Bean JwtDecoder jwtDecoder(){ return NimbusJwtDecoder.withPublicKey(rsakeysConfig.publicKey()).build(); } @Bean JwtEncoder jwtEncoder(){ JWK jwk = new RSAKey.Builder(rsakeysConfig.publicKey()).privateKey(rsakeysConfig.privateKey()).build(); JWKSource<SecurityContext> jwkSource = new ImmutableJWKSet<>(new JWKSet(jwk)); return new NimbusJwtEncoder(jwkSource); } }
额外优化说明
- 合并了原两次
authorizeRequests()调用为一个authorizeHttpRequests()链式配置,代码更简洁。 - 将
oauth2ResourceServer(OAuth2ResourceServerConfigurer::jwt)调整为符合Security 6.0风格的Lambda配置写法。 - 成员变量添加
final修饰,符合Spring依赖注入的最佳实践。
内容的提问来源于stack exchange,提问作者Đỗ Như Vỹ
相关产品推荐
相关产品推荐

