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

Spring Boot使用withDefaultPasswordEncoder时出现Bad credentials问题

问题分析与修复方案

核心问题

你遇到的Bad credentials错误,根源是密码编码逻辑不匹配:

  • User.withDefaultPasswordEncoder()是Spring Security仅用于快速演示的方法,它会在创建用户时自动加密密码,但如果你的Security配置没有正确关联对应编码器,或存在配置冲突,就会导致登录时密码校验失败。
  • 官方明确标注该方法仅适用于示例场景,不推荐用于实际项目。

修复步骤

1. 配置独立的PasswordEncoder Bean

在SecurityConfig中添加生产环境常用的BCrypt密码编码器Bean:

@Bean
public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
}

2. 修改UserDetailsService实现

弃用withDefaultPasswordEncoder(),改用上面配置的编码器加密密码:

@Bean
public UserDetailsService userDetailsService(PasswordEncoder passwordEncoder) {
    UserDetailsManager userDetailsManager = new InMemoryUserDetailsManager();
    
    // 创建普通用户
    UserDetails user = User.builder()
            .username("user")
            .password(passwordEncoder.encode("password"))
            .roles("USER")
            .build();
    userDetailsManager.createUser(user);
    
    // 创建管理员用户
    UserDetails admin = User.builder()
            .username("admin")
            .password(passwordEncoder.encode("password"))
            .roles("ADMIN")
            .build();
    userDetailsManager.createUser(admin);
    
    return userDetailsManager;
}

3. 关联SecurityFilterChain(若需显式配置)

如果项目中自定义了SecurityFilterChain,需确保它关联上述的UserDetailsService和PasswordEncoder:

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    http
            .authorizeHttpRequests(auth -> auth
                    .anyRequest().authenticated()
            )
            .formLogin(form -> form.permitAll())
            .userDetailsService(userDetailsService(passwordEncoder()))
            .passwordEncoder(passwordEncoder());
    
    return http.build();
}

额外说明

  • 所有涉及密码处理的逻辑必须使用同一个PasswordEncoder实例,这是密码校验匹配的核心前提。
  • 禁止在生产环境使用withDefaultPasswordEncoder(),避免潜在的配置风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 08:25:04