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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 20:27:39