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

Spring Boot 2.7升级后Swagger UI访问403权限问题求助

问题描述

将Spring Boot从2.5版本升级到2.7版本后,接口(如https://localhost:8493/test/myendpoint)可正常访问并获取JSON数据,但访问https://localhost:8493/test/swagger-ui时出现403权限错误,提示「You don't have authorisation to view this page. HTTP ERROR 403」。相关配置如下:

SecurityConfig配置类

@Configuration 
@Order(Ordered.HIGHEST_PRECEDENCE)
@Data
public class SecurityConfig {


    @Value("${portal.required.role.name}")
    private String portalRoleName;

    @Value("${server.servlet.context-path}")
    private String servletContextPath;

    @Bean
    protected SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {

        http
            .authorizeRequests()
                .antMatchers("/myendpoint/**").permitAll().and()
            .authorizeRequests().antMatchers("/myendpoint2/**").permitAll().and()
            .authorizeRequests().antMatchers(servletContextPath).hasAuthority(portalRoleName)
                .anyRequest().fullyAuthenticated();

        return http.build();
    }
}

SpringFoxConfig配置类

@Configuration
@EnableOpenApi
@Import(SpringDataRestConfiguration.class)
public class SpringFoxConfig {

    @Bean
    public WebMvcRequestHandlerProvider webMvcRequestHandlerProvider(Optional<ServletContext> servletContext, HandlerMethodResolver methodResolver, List<RequestMappingInfoHandlerMapping> handlerMappings) {
        handlerMappings = handlerMappings.stream().filter(rh -> rh.getClass().getName().contains("RequestMapping")).toList();
        return new WebMvcRequestHandlerProvider(servletContext, methodResolver, handlerMappings);
    }

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage("mypackage"))
                .paths(PathSelectors.any())
                .build();
    }

}

依赖配置

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>

         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.2.6</version>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-envers -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-envers</artifactId>
        </dependency>

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-c3p0</artifactId>
            <version>5.4.4.Final</version>
        </dependency>

        <!--Swagger START-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>3.0.0</version>
        </dependency>

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-bean-validators</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>3.0.0</version>
        </dependency>
        <!--Swagger END-->

        <!-- JSONObject -->
        <dependency>
            <groupId>org.codehaus.jettison</groupId>
            <artifactId>jettison</artifactId>
            <version>1.5.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>

    </dependencies>

properties文件配置

spring.mvc.pathmatch.matching-strategy= ANT_PATH_MATCHER

解决方案

403错误的核心原因是Spring Security未对Swagger相关的静态资源和接口放行,结合Spring Boot 2.7与SpringFox 3.0.0的适配要求,需做以下修改:

1. 调整SecurityConfig,放行Swagger路径

在securityFilterChain方法中添加Swagger全量路径的放行规则,覆盖UI页面、API文档接口、静态资源等:

@Configuration 
@Order(Ordered.HIGHEST_PRECEDENCE)
@Data
public class SecurityConfig {

    @Value("${portal.required.role.name}")
    private String portalRoleName;

    @Value("${server.servlet.context-path}")
    private String servletContextPath;

    @Bean
    protected SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {

        http
            .authorizeRequests()
                // 放行Swagger所有相关路径
                .antMatchers("/swagger-ui/**", "/v3/api-docs/**", "/swagger-resources/**", "/webjars/**").permitAll()
                .antMatchers("/myendpoint/**").permitAll()
                .antMatchers("/myendpoint2/**").permitAll()
                .antMatchers(servletContextPath).hasAuthority(portalRoleName)
                .anyRequest().fullyAuthenticated();

        return http.build();
    }
}

2. 简化Swagger依赖(可选但推荐)

springfox-boot-starter已包含springfox-swagger-ui、springfox-swagger2等核心依赖,重复引入会造成冗余,可简化为:

<!--Swagger START-->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-bean-validators</artifactId>
    <version>3.0.0</version>
</dependency>
<!--Swagger END-->

3. 适配OpenAPI 3.0(可选)

将Docket的文档类型改为OAS_30,同时补充API基础信息,提升文档可读性:

@Configuration
@EnableOpenApi
@Import(SpringDataRestConfiguration.class)
public class SpringFoxConfig {

    @Bean
    public WebMvcRequestHandlerProvider webMvcRequestHandlerProvider(Optional<ServletContext> servletContext, HandlerMethodResolver methodResolver, List<RequestMappingInfoHandlerMapping> handlerMappings) {
        handlerMappings = handlerMappings.stream().filter(rh -> rh.getClass().getName().contains("RequestMapping")).toList();
        return new WebMvcRequestHandlerProvider(servletContext, methodResolver, handlerMappings);
    }

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.OAS_30)
                .select()
                .apis(RequestHandlerSelectors.basePackage("mypackage"))
                .paths(PathSelectors.any())
                .build()
                .apiInfo(apiInfo());
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("项目API文档")
                .description("接口功能与参数说明")
                .version("1.0")
                .build();
    }
}

4. 保留现有路径匹配配置

spring.mvc.pathmatch.matching-strategy=ANT_PATH_MATCHER配置无需修改,SpringFox 3.0.0不支持Spring Boot 2.6+默认的PATH_PATTERN_PARSER,该配置是必要的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:25:34