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

Spring Security报错"No default password encoder configured"的解决方案咨询

Spring Security报错"No default password encoder configured"的解决方案咨询

嘿,我看到你碰到了Spring Security里的「No default password encoder configured」这个头疼的报错,结合你贴出来的这段不完整的SecurityConfig代码,我来帮你捋清楚怎么解决这个问题~

首先,这个错误本质上是Spring Security的认证组件找不到可用的密码编码器,虽然你已经定义了PasswordEncoder的Bean,但大概率是配置环节没把它正确关联到认证流程里。咱们一步步来修复:

  • 第一步:确认你的PasswordEncoder Bean配置正确
    你当前的写法是完全没问题的,Spring官方也推荐用DelegatingPasswordEncoder,它能自动识别密码前缀(比如{bcrypt})来匹配对应的加密算法:

    @Bean
    public PasswordEncoder passwordEncoder() {
        return PasswordEncoderFactories.createDelegatingPasswordEncoder();
    }
    
  • 第二步:补全并修正AuthenticationManager的配置
    你贴的代码里AuthenticationManager的定义写到一半断了,这里必须把PasswordEncoder明确设置给DaoAuthenticationProvider,同时补全UserDetailsService的注入:

    @Bean
    public AuthenticationManager authenticationManager(UserDetailsService userDetailsService, PasswordEncoder passwordEncoder) throws Exception {
        DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
        // 补全UserDetailsService的注入
        provider.setUserDetailsService(userDetailsService);
        // 关键:把我们定义的密码编码器绑定到认证提供者
        provider.setPasswordEncoder(passwordEncoder);
        // 用ProviderManager来包装这个提供者,作为AuthenticationManager的实现
        return new ProviderManager(Collections.singletonList(provider));
    }
    

    之前的代码就是缺了provider.setPasswordEncoder(passwordEncoder)这一步,导致认证组件不知道要用你定义的编码器。

  • 第三步:确保SecurityFilterChain也关联到正确的认证配置
    如果你是用SecurityFilterChain来配置HTTP安全规则,记得把上面的AuthenticationManager关联进去,或者直接在链里指定UserDetailsService和PasswordEncoder:

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .anyRequest().authenticated()
            )
            .formLogin(form -> form.permitAll())
            // 关联我们自定义的AuthenticationManager
            .authenticationManager(authenticationManager(userDetailsService(), passwordEncoder()));
        return http.build();
    }
    

    或者更简洁的方式,直接在HttpSecurity里设置:

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

按照上面的步骤调整后,Spring Security就能正确找到你配置的密码编码器,那个报错应该就会消失啦。

备注:内容来源于stack exchange,提问作者Shin Thant Maung

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 16:09:43