Spring 3.1.2版本升级:WebSecurityConfig类改写咨询
Spring 3.1.2 下改写 WebSecurityConfig 配置类
针对Spring Security 6.x(对应Spring 3.1.x)移除WebSecurityConfigurerAdapter的情况,改写后的配置类如下:
package ua.com.alevel.config.security; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.dao.DaoAuthenticationProvider; import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration; 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.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.util.matcher.AntPathRequestMatcher; @Configuration @EnableWebSecurity @EnableMethodSecurity(prePostEnabled = true) public class WebSecurityConfig { private final UserDetailsService userDetailsService; @Autowired public WebSecurityConfig(@Qualifier("userDetailsServiceImpl") UserDetailsService userDetailsService) { this.userDetailsService = userDetailsService; } @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .csrf(csrf -> csrf.disable()) .authorizeHttpRequests(auth -> auth .requestMatchers("/**", "/api/v1/user/getActualUser").permitAll() .anyRequest().authenticated() ) .formLogin(form -> form .loginPage("/user/loginUser").permitAll() .defaultSuccessUrl("/") ) .logout(logout -> logout .logoutRequestMatcher(new AntPathRequestMatcher("/user/logoutUser", "POST")) .invalidateHttpSession(true) .clearAuthentication(false) .deleteCookies("JSESSIONID") .logoutSuccessUrl("/user/loginUser") ); return http.build(); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(12); } @Bean public DaoAuthenticationProvider daoAuthenticationProvider() { DaoAuthenticationProvider provider = new DaoAuthenticationProvider(); provider.setPasswordEncoder(passwordEncoder()); provider.setUserDetailsService(userDetailsService); return provider; } @Bean public AuthenticationManager authenticationManager(AuthenticationConfiguration authConfig) throws Exception { return authConfig.getAuthenticationManager(); } }
关键改动说明
- 移除继承关系:不再继承
WebSecurityConfigurerAdapter,该类在Spring Security 6.0+已完全移除。 - SecurityFilterChain配置:通过
@Bean SecurityFilterChain替代原configure(HttpSecurity)方法,采用Lambda DSL风格编写,更简洁直观。 - 方法安全注解更新:用
@EnableMethodSecurity替代旧的@EnableGlobalMethodSecurity,这是Spring Security 5.6+官方推荐的方法安全配置注解。 - AuthenticationManager获取:通过
AuthenticationConfiguration获取认证管理器,替代原重写authenticationManagerBean()的方式。 - 冗余Bean清理:删除了重复的
bCryptPasswordEncoder()Bean,统一使用passwordEncoder()提供密码加密实例。 - 自动识别认证提供者:
DaoAuthenticationProvider作为Bean会被Spring Security自动纳入认证流程,无需手动在AuthenticationManagerBuilder中配置。
内容的提问来源于stack exchange,提问作者Artem Dubenko
相关产品推荐
相关产品推荐

