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

访问Swagger UI时出现403 Forbidden错误的排查求助

Spring Boot 3.1.4 + Spring Security 下Swagger UI 403问题排查

我在Spring Boot 3.1.4项目中配置了Spring Security白名单端点,/auth/login和/auth/signup能正常访问,但浏览器访问Swagger UI时一直报403 Forbidden错误。使用的SpringDoc版本是OpenAPI Starter WebMVC UI 2.2.0,以下是我的配置代码,求帮忙排查问题。

SecurityConfig类代码

package com.navyug.security.authn.config;

import static org.springframework.security.config.Customizer.withDefaults;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
import com.navyug.security.authn.service.UserServiceImpl;

@Configuration
@EnableWebSecurity
public class WebSecurityConfig {

    @Autowired
    private UserServiceImpl userDetailsServiceImpl;

    private static final String[] AUTH_WHITELIST = { "/v2/api-docs", "/v3/api-docs", "/swagger-resources",
            "/swagger-resources/**", "/swagger-ui.html", "/swagger-ui/**", "/webjars/**", "/api-docs.yaml", "/ws",
            "auth/login", "auth/signup", "/", "/*.js", "/*.ico", "/*.json", "/*.png", "/*.jpg", "/*.txt*", "/*.css" };

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http.authorizeHttpRequests(configurer -> configurer.requestMatchers(AUTH_WHITELIST).permitAll())
                .httpBasic(withDefaults()).csrf((csrf) -> csrf.disable());

        return http.build();
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Bean
    public AuthenticationManager authenticationManager(AuthenticationConfiguration authConfig) throws Exception {
        return authConfig.getAuthenticationManager();
    }

    @Bean
    public DaoAuthenticationProvider authenticationProvider() {
        DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider();

        authProvider.setUserDetailsService(userDetailsServiceImpl);
        authProvider.setPasswordEncoder(passwordEncoder());

        return authProvider;
    }
}

application.properties配置

springdoc.api-docs.path=/api-docs
springdoc.swagger-ui.path=/swagger-ui.html
springdoc.swagger-ui.enabled=true
springdoc.swagger-ui.with-credentials=false

问题排查与修复

  • 核心缺失:API文档路径未放行
    配置文件中指定了springdoc.api-docs.path=/api-docs,但白名单里只包含/api-docs.yaml,漏掉了/api-docs这个Swagger UI依赖的核心接口,导致拉取文档时被拦截,触发403错误。

  • 路径不规范:缺少前缀斜杠
    白名单中的auth/login和auth/signup未加开头的/,虽然当前能访问,但属于不规范写法,建议修正为/auth/login、/auth/signup避免潜在问题。

  • 修正后的白名单数组
    更新AUTH_WHITELIST,补充/api-docs并修正路径前缀:

    private static final String[] AUTH_WHITELIST = { 
        "/v2/api-docs", "/v3/api-docs", "/swagger-resources",
        "/swagger-resources/**", "/swagger-ui.html", "/swagger-ui/**", 
        "/webjars/**", "/api-docs", "/api-docs.yaml", "/ws",
        "/auth/login", "/auth/signup", "/", "/*.js", "/*.ico", 
        "/*.json", "/*.png", "/*.jpg", "/*.txt*", "/*.css" 
    };
    
  • 额外验证
    确认SecurityFilterChain配置中,除白名单外的其他请求是否需要认证,当前配置仅放行白名单,符合预期。httpBasic启用不影响Swagger访问,若无需基础认证可移除该配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:43:19