Spring Security 6为何未在控制台生成默认密码?
问题分析与解决
你遇到的情况是因为引入了spring-boot-starter-oauth2-client和spring-boot-starter-oauth2-resource-server依赖后,Spring Boot的Security自动配置逻辑发生了变化——默认的内存用户(user+自动生成密码)的自动配置会被覆盖,所以启动时不会再生成默认密码。
解决办法
方法1:移除不需要的OAuth2依赖(如果用不到OAuth2功能)
如果你不需要OAuth2客户端或资源服务器的功能,直接删除这两个依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-resource-server</artifactId> </dependency>
重启应用后,Spring Security会自动启用默认的内存用户配置,控制台会输出生成的默认密码。
方法2:手动配置默认用户(保留OAuth2依赖的情况下)
如果需要保留OAuth2相关依赖,但仍想使用简单的用户名密码认证,有两种方式:
方式A:通过配置文件指定
在application.properties或application.yml中添加以下配置:
spring.security.user.name=user spring.security.user.password=your-custom-password
这样Spring Boot会基于这些配置创建内存用户,启动时就不会自动生成随机密码了。
方式B:自定义Security配置类
创建一个Security配置类,手动配置内存用户:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; 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; @Configuration public class SecurityConfig { @Bean public UserDetailsService userDetailsService() { UserDetails user = User.withUsername("user") .password(passwordEncoder().encode("your-password")) .roles("USER") .build(); return new InMemoryUserDetailsManager(user); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } }
这样既保留了OAuth2依赖,又能使用自定义的内存用户认证。
内容的提问来源于stack exchange,提问作者190303458
相关产品推荐
相关产品推荐

