Spring Security无法禁用默认密码生成器,配置账号后仍无效
问题描述
我正在为项目集成Spring Security,控制台会自动生成默认密码,希望禁用该功能。相关讨论指出只需在application.properties中配置user.name和user.password,但配置完成后,系统仍会生成自动密码,且不识别已配置的用户名。请问Spring Security近期是否有相关变更?
项目配置
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.8</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.code</groupId> <artifactId>Spring-Security-V1</artifactId> <version>0.0.1-SNAPSHOT</version> <name>Spring-Security-V1</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
application.properties
spring.security.user.name=demouser spring.security.user.password=password spring.security.user.roles=manager
问题分析与解决
你的Spring Boot版本是2.7.8,对应的Spring Security 5.7.x并没有移除spring.security.user.*配置的功能,出现这种情况大概率是以下原因:
密码未编码导致配置失效
Spring Security 5之后强制要求密码必须编码,直接写明文密码会被系统忽略,进而自动生成默认用户。测试环境下可以给密码加上{noop}前缀标记为明文:spring.security.user.password={noop}password生产环境建议使用BCrypt等加密算法生成加密后的密码再配置。
配置文件加载异常
检查application.properties是否放在src/main/resources目录下,同时确认没有其他优先级更高的配置文件(比如application.yml、环境专属配置文件)覆盖了当前配置。可以在启动日志中搜索spring.security.user相关条目,验证配置是否成功加载。自定义Security配置冲突
如果项目中存在WebSecurityConfigurerAdapter或SecurityFilterChain的自定义配置类,可能会覆盖默认的用户配置逻辑。这种情况下需要在自定义配置中手动引入配置文件的用户信息,或者直接在配置类中定义用户。
总结:2.7.8版本没有变更默认用户配置的规则,优先排查密码编码和配置加载问题,基本就能解决。
内容的提问来源于stack exchange,提问作者ssj

