Spring Boot 3中Basic Auth禁用失效及随机密码问题咨询
彻底禁用Spring Boot 3中的Basic Auth并消除随机密码警告
问题根源
你看到的随机密码警告来自UserDetailsServiceAutoConfiguration,和禁用Basic Auth的操作无关。Spring Security的自动配置逻辑是:只要引入了spring-boot-starter-security依赖,且容器里没有自定义的UserDetailsService、AuthenticationManager这类核心认证Bean,就会自动生成默认用户(用户名user)和随机密码——哪怕你已经禁用了Basic Auth的认证过滤器,这个自动生成用户的逻辑还是会触发。
解决办法
有两种靠谱的方式可以彻底解决这个问题:
方法一:直接排除用户自动配置类
在启动类上添加exclude属性,把生成默认用户的自动配置类排除掉:
package com.derbyware.registration; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration; @SpringBootApplication(exclude = {UserDetailsServiceAutoConfiguration.class}) public class RegistrationApplication { public static void main(String[] args) { SpringApplication.run(RegistrationApplication.class, args); } }
方法二:自定义空的UserDetailsService(适合后续扩展)
如果之后可能需要添加认证逻辑,这种方式更灵活。在你的配置类里加一个空实现的UserDetailsService Bean,Spring就不会触发默认用户生成逻辑了:
package com.derbyware.registration.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.web.SecurityFilterChain; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfigurationSource; import java.util.List; @Configuration public class ProjectConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.authorizeHttpRequests(auth -> auth.requestMatchers("/register", "/registerCaptcha").permitAll() .anyRequest().denyAll() ) .csrf(csrf -> csrf.disable()) .httpBasic(httpBasic -> httpBasic.disable()) .cors(cors -> { CorsConfigurationSource source = request -> { CorsConfiguration config = new CorsConfiguration(); config.setAllowedOrigins(List.of("http://localhost:4001", "http://127.0.0.1:4001")); config.setAllowedMethods(List.of("*")); config.setAllowedHeaders(List.of("*")); return config; }; cors.configurationSource(source); }); return http.build(); } @Bean public UserDetailsService userDetailsService() { return username -> { throw new UsernameNotFoundException("未配置任何用户"); }; } }
验证结果
修改完重启应用,Using generated security password的警告会消失,同时Basic Auth已经被彻底禁用,你设置的接口权限规则依然正常生效。
内容的提问来源于stack exchange,提问作者usertest
相关产品推荐
相关产品推荐

