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

Spring Boot默认用户名密码无法正常使用问题求助

解决Spring Boot Security登录失败问题

核心原因及解决方案

1. 密码未加密(Spring Boot 3.x+强制要求)

Spring Boot 3.0及以上版本中,Security默认使用DelegatingPasswordEncoder,不允许明文密码。直接配置明文密码会导致验证失败,需要:

  • 生成加密后的密码:使用BCrypt加密工具生成密码串,示例代码:
    import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
    
    public class PasswordGenerator {
        public static void main(String[] args) {
            BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
            // 替换为你的明文密码
            System.out.println(encoder.encode("rahul"));
        }
    }
    
  • 修改application.properties,使用加密后的密码:
    spring.security.user.name=rahul
    spring.security.user.password=$2a$10$xxxxxxx...(上述代码生成的加密串)
    

2. 自定义Security配置覆盖了默认用户

如果项目中存在自定义的SecurityFilterChain配置类,会直接覆盖Spring Boot的默认用户配置。此时需要手动在配置中添加用户:

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.anyRequest().authenticated())
            .formLogin(form -> form.permitAll());
        return http.build();
    }

    @Bean
    public UserDetailsService userDetailsService() {
        UserDetails user = User.withUsername("rahul")
            .passwordEncoder(passwordEncoder()::encode)
            .password("rahul")
            .roles("USER")
            .build();
        return new InMemoryUserDetailsManager(user);
    }

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

3. DevTools导致配置未生效

由于引入了spring-boot-devtools,修改配置文件后可能未热更新。解决方式:

  • 完全重启项目,确保配置文件被加载
  • 若频繁出现此问题,可临时移除DevTools依赖测试

4. 确认默认用户是否被禁用

启动项目时,检查控制台是否打印类似Using generated security password: xxxxx的日志。如果没有该日志,说明默认用户已被自定义配置覆盖,需按第2点处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 01:37:56