Spring Security配置过时求助:求最新配置方法(Spring新手)
Spring Security 最新配置指南
你的问题
系统提示Spring Security配置已过时,作为Spring新手,需要最新的配置方法。

最新配置方案(适配Spring Security 6.x及以上版本)
Spring Security 5.7+就已标记WebSecurityConfigurerAdapter为过时,现在推荐通过注册SecurityFilterChain Bean完成配置,以下是常用场景的配置示例:
1. 基础内存用户+路径权限配置
创建配置类,直接定义Bean即可:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.provisioning.InMemoryUserDetailsManager; import org.springframework.security.web.SecurityFilterChain; @Configuration @EnableWebSecurity public class SecurityConfig { // 配置请求权限与认证规则 @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(auth -> auth // 开放无需认证的路径 .requestMatchers("/public/**", "/login", "/register").permitAll() // 其余所有请求必须认证 .anyRequest().authenticated() ) // 启用表单登录,支持自定义登录页 .formLogin(form -> form .loginPage("/custom-login") // 可选,不配置则用默认登录页 .permitAll() ) // 配置退出登录 .logout(logout -> logout .permitAll() ); return http.build(); } // 密码编码器(Spring Security 5+强制要求,禁止明文密码) @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } // 内存用户示例,实际项目建议对接数据库 @Bean public UserDetailsService userDetailsService() { UserDetails regularUser = User.withUsername("user") .password(passwordEncoder().encode("user123")) .roles("USER") .build(); UserDetails adminUser = User.withUsername("admin") .password(passwordEncoder().encode("admin456")) .roles("ADMIN") .build(); return new InMemoryUserDetailsManager(regularUser, adminUser); } }
2. 数据库用户适配(扩展)
如果用户数据存在数据库,只需替换UserDetailsService的实现:
@Bean public UserDetailsService userDetailsService(UserRepository userRepo) { return username -> { // 替换为你项目的实体类和Repository com.yourpackage.entity.User dbUser = userRepo.findByUsername(username) .orElseThrow(() -> new UsernameNotFoundException("用户不存在:" + username)); return User.withUsername(dbUser.getUsername()) .password(dbUser.getEncryptedPassword()) .roles(dbUser.getRoles().toArray(new String[0])) .build(); }; }
核心变化点
- 不再需要继承
WebSecurityConfigurerAdapter(该类已废弃) - 用
SecurityFilterChainBean集中配置所有安全规则 - 必须显式配置
PasswordEncoder,不能再使用明文密码 - 用
authorizeHttpRequests替代旧版的authorizeRequests方法
内容的提问来源于stack exchange,提问作者Oneness
相关产品推荐
相关产品推荐

