
spring boot 应用在迁移项目目录后突然出现“using generated security password”警告且自定义 securityfilterchain 未生效,根本原因通常是主启动类(@springbootapplication)所在包路径层级过低,导致 spring boot 的组件扫描无法覆盖 securityconfig 等安全配置类。
spring boot 应用在迁移项目目录后突然出现“using generated security password”警告且自定义 securityfilterchain 未生效,根本原因通常是主启动类(@springbootapplication)所在包路径层级过低,导致 spring boot 的组件扫描无法覆盖 securityconfig 等安全配置类。
当您将 Spring Boot 项目从原位置移动到新文件夹(例如通过 IntelliJ 重定位),看似只是物理路径变化,但若同时改变了主启动类(如 CafeManagementSystemApplication)所在的 Java 包结构——尤其是将其移入子包(如 com.inn.cafe.bootloader)或脱离原有根包层级——就会触发 Spring Boot 默认的组件扫描范围限制。
Spring Boot 的 @SpringBootApplication 是一个组合注解,等价于 @Configuration + @EnableAutoConfiguration + @ComponentScan。其中 @ComponentScan 默认仅扫描主启动类所在包及其子包。如果您的 SecurityConfig 位于 com.inn.cafe.JWT,而主类被误移至 com.inn.cafe.bootloader.CafeManagementSystemApplication,那么 com.inn.cafe.JWT 将不被视为子包(因为 JWT 与 bootloader 是同级包),从而导致 SecurityConfig 完全未被加载——此时 Spring Security 回退到自动配置的默认行为,即启用 UserDetailsServiceAutoConfiguration,生成临时密码并注册默认登录页过滤器链,这正是日志中出现以下关键信息的原因:
Using generated security password: 762a8270-b075-45b5-ba17-691aa31d86cb ... Will secure any request with [DefaultLoginPageGeneratingFilter, ...]
而您观察到“添加日志无输出”“@Bean 未注册”,正是该类未被 Spring 容器管理的直接证据。
✅ 正确做法:确保主启动类位于项目最顶层包(root package)下,且所有核心配置类(如 SecurityConfig, CustomerUserDetailsService, JwtFilter)均位于其子包内。
例如,推荐的包结构应为:
com.inn.cafe/ ← 主启动类必须在此层级(或更高) ├── CafeManagementSystemApplication.java // @SpringBootApplication ├── JWT/ │ ├── SecurityConfig.java // ✅ 被扫描(com.inn.cafe.JWT 是子包) │ ├── JwtFilter.java │ └── AuthEntryPointJwt.java ├── service/ ├── repository/ └── ...
⚠️ 注意事项:
- ❌ 不要将主类放在 com.inn.cafe.bootloader 或 com.inn.cafe.config 等与 JWT 同级的包中;
- ✅ 若必须调整包结构,可通过显式配置 @ComponentScan 扩展扫描路径:
@SpringBootApplication @ComponentScan(basePackages = { "com.inn.cafe.JWT", "com.inn.cafe.service", "com.inn.cafe.repository" }) public class CafeManagementSystemApplication { ... } - ✅ 验证是否生效:启动时检查日志是否包含 SecurityConfig 中 @Bean 方法的初始化输出(如 PasswordEncoder 创建日志),或确认 filterChain(HttpSecurity) 方法是否执行(可加断点或 System.out.println);
- ? 切勿使用 @EnableAutoConfiguration(exclude = SecurityAutoConfiguration.class) 来“绕过”问题——这会彻底禁用 Spring Security,违背 JWT 认证需求,且掩盖真实配置缺陷。
最后,请检查您的 SecurityConfig 类中存在一个潜在路径不一致问题:
webSecurityCustomizer() 忽略了 /users/login 等路径,但 filterChain() 中却配置了 /user/login(少一个 s)。请统一为 /users/** 或 /user/**,否则未忽略的端点仍会受默认安全策略拦截:
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
return (web) -> web.ignoring()
.requestMatchers("/users/login", "/users/signup", "/users/forgotPassword"); // 保持与 filterChain 一致
}修复包结构后重启应用,SecurityFilterChain 将正常注册,“generated security password”警告消失,JWT 认证流程即可按预期工作。

















