Spring Security场景下如何通过YML配置文件禁用端点认证(含HTTP Basic认证实现案例)
好问题!Spring Security本身没有一个单一的YML开关可以一键禁用所有认证,但Spring Boot提供了几个官方原生的配置方式,不需要你从零实现自定义逻辑,刚好适配你开发阶段的便捷需求:
方式一:通过条件注解控制Security配置类的生效
利用Spring的@ConditionalOnProperty注解,让你的SecurityConfig只在指定配置项为true时生效。开发环境中只需通过YML将该配置项设为false,就能直接跳过整个Security认证配置。
修改你的配置类:
@Configuration @EnableWebSecurity @RequiredArgsConstructor // 默认启用认证,当app.security.enabled设为false时不加载该配置 @ConditionalOnProperty(prefix = "app.security", name = "enabled", havingValue = "true", matchIfMissing = true) public class SecurityConfig extends WebSecurityConfigurerAdapter { private final AuthenticationEntryPoint authenticationEntryPoint; private final MyAuthenticationProvider myAuthenticationProvider; @Override public void configure(final AuthenticationManagerBuilder auth) { auth.authenticationProvider(myAuthenticationProvider); } @Override protected void configure(final HttpSecurity http) throws Exception { http.authorizeRequests() .anyRequest().authenticated() .and() .httpBasic() .authenticationEntryPoint(authenticationEntryPoint); } @Override public void configure(final WebSecurity web) { web.ignoring().antMatchers("/swagger-ui/**"); } }
然后在开发环境的application-dev.yml中添加配置:
app: security: enabled: false
方式二:直接禁用Spring Security过滤器链(Spring Boot 2.7+)
Spring Boot 2.7及以上版本提供了官方配置属性spring.security.filter.enabled,将其设为false可以完全禁用Spring Security的过滤器链,所有请求都会跳过认证逻辑,是最直接的快速关闭方式。
在application-dev.yml中添加:
spring: security: filter: enabled: false
方式三:按需开放所有端点(保留Security配置但跳过认证)
如果你不想完全禁用Security配置,只是想在开发阶段开放所有端点,可以通过@Value读取配置项,动态调整HttpSecurity规则:
修改SecurityConfig:
@Configuration @EnableWebSecurity @RequiredArgsConstructor public class SecurityConfig extends WebSecurityConfigurerAdapter { private final AuthenticationEntryPoint authenticationEntryPoint; private final MyAuthenticationProvider myAuthenticationProvider; // 读取配置,默认要求认证 @Value("${app.security.require-auth:true}") private boolean requireAuth; @Override public void configure(final AuthenticationManagerBuilder auth) { auth.authenticationProvider(myAuthenticationProvider); } @Override protected void configure(final HttpSecurity http) throws Exception { if (requireAuth) { http.authorizeRequests() .anyRequest().authenticated() .and() .httpBasic() .authenticationEntryPoint(authenticationEntryPoint); } else { // 开发阶段允许所有请求 http.authorizeRequests().anyRequest().permitAll(); } } @Override public void configure(final WebSecurity web) { web.ignoring().antMatchers("/swagger-ui/**"); } }
对应的application-dev.yml配置:
app: security: require-auth: false
这些都是Spring官方原生支持的方案,不需要额外编写复杂的自定义逻辑,完美适配开发阶段的便捷调试需求。
内容的提问来源于stack exchange,提问作者user8473984
相关产品推荐
相关产品推荐

