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

如何移除Spring Boot测试中的“使用默认安全密码”提示?

解决@WebMvcTest测试时出现默认安全密码提示的问题

问题根源

你遇到的提示是Spring Security自动配置触发的:当Spring容器中找不到自定义的UserDetailsService实现类(多模块项目中其他模块未被测试扫描到),且你的安全配置没有明确覆盖用户认证逻辑时,Spring会自动生成一个默认的用户和随机密码。而移除WebSecurityConfig中的authenticationManagerBean() Bean后,原本的自定义安全配置标识消失,触发了这个默认行为。

解决方案

1. 测试环境禁用Spring Security自动配置

直接在@WebMvcTest注解中排除安全自动配置类,彻底关闭测试时的默认安全逻辑:

@WebMvcTest(excludeAutoConfiguration = SecurityAutoConfiguration.class)
public class YourControllerTest {
    // 测试代码
}

或者更精准地排除相关配置:

@WebMvcTest(exclude = {SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class})

2. 为测试配置自定义安全规则

如果测试需要保留部分安全逻辑但不想看到默认密码提示,可以编写测试专用的安全配置类:

@TestConfiguration
public class TestSecurityConfig {
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http.authorizeHttpRequests(auth -> auth.anyRequest().permitAll())
            .csrf(csrf -> csrf.disable());
        return http.build();
    }
}

然后在测试类中导入这个配置:

@WebMvcTest
@Import(TestSecurityConfig.class)
public class YourControllerTest {
    // 测试代码
}

3. 修复多模块扫描问题

如果测试需要用到真实的UserDetailsService,确保测试能扫描到其他模块的类:

  • 在测试类上添加@ComponentScan(basePackages = "com.other.module.package"),指定其他模块的包路径
  • 或者直接用@Import(YourUserDetailsServiceImpl.class)导入具体的实现类

关于是否可以忽略提示

开发测试阶段可以暂时忽略,但不建议长期这么做:

  • 默认密码的存在可能导致测试时接口需要认证,影响测试用例的执行
  • 容易混淆生产环境的安全配置认知,增加后续维护风险

为什么移除Bean后出现问题

之前你重写并暴露authenticationManagerBean()时,Spring Security会识别到你有自定义的安全配置(继承WebSecurityConfigurerAdapter),不会触发默认用户生成逻辑;移除该Bean后,你的安全配置没有足够的自定义标识,且容器中找不到UserDetailsService,所以触发了自动配置的默认用户生成。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:55:24