You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级已弃用的WebSecurityConfigurerAdapter后,如何禁用Spring自动生成密码

问题解决:Spring Security配置SecurityFilterChain后仍生成默认密码

核心原因

你的配置仅定义了请求授权规则,但未提供自定义的用户认证逻辑(如UserDetailsService),Spring Security的自动配置会补全默认的用户认证Bean,从而生成随机密码。即使排除SecurityAutoConfiguration,UserDetailsServiceAutoConfiguration仍会生效,导致默认密码出现。

解决方案

1. 添加自定义用户认证Bean

在SecurityConfig中添加UserDetailsService Bean,定义自己的用户和角色,覆盖默认配置:

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http.csrf().disable();
        http.authorizeHttpRequests()
                .requestMatchers("/auth/**").permitAll()
                .requestMatchers("/role1/**", "/role2/**", "/role3/**").hasAnyRole("ADMIN")
                .anyRequest().permitAll();
        return http.build();
    }

    // 添加自定义用户认证Bean
    @Bean
    public UserDetailsService userDetailsService() {
        UserDetails admin = User.withUsername("admin")
                .password("{noop}admin123") // {noop}表示不加密,生产环境需替换为BCrypt等加密方式
                .roles("ADMIN")
                .build();
        return new InMemoryUserDetailsManager(admin);
    }
}

2. 正确排除自动配置类

如果不需要默认的用户认证自动配置,需同时排除SecurityAutoConfiguration和UserDetailsServiceAutoConfiguration:

@SpringBootApplication(exclude = {
    SecurityAutoConfiguration.class,
    UserDetailsServiceAutoConfiguration.class
})
public class YourApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}

注意事项

  • 生产环境不要使用{noop}明文密码,需替换为PasswordEncoder加密,比如BCrypt:
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
    
    此时用户密码需改为加密后的值:.password(passwordEncoder().encode("admin123"))

内容的提问来源于stack exchange,提问作者Amir Khanalipour

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 13:55:21