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

Java17+Spring Boot2.7.2+Tomcat8.5部署WAR后Swagger失效求解

解决方案

1. 调整Tomcat服务模式的Java权限配置

Tomcat以服务运行时会启用更严格的安全策略,可能导致Swagger2无法访问必要类或资源:

  • 找到Tomcat安装目录下的conf/catalina.policy文件,添加以下权限配置:
    grant codeBase "file:${catalina.base}/webapps/你的项目名/-" {
        permission java.lang.RuntimePermission "accessDeclaredMembers";
        permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
        permission java.io.FilePermission "${catalina.base}/webapps/你的项目名/-", "read";
    };
    
  • 重启Tomcat服务后验证Swagger状态。

2. 替换Swagger2为SpringDoc OpenAPI

SpringFox(Swagger2的官方实现)已停止维护,对Java17和SpringBoot2.7+支持不佳,建议迁移到活跃维护的SpringDoc:

  • 移除pom.xml中所有SpringFox相关依赖(如springfox-swagger2、springfox-swagger-ui等)
  • 添加SpringDoc适配依赖:
    <dependency>
        <groupId>org.springdoc</groupId>
        <artifactId>springdoc-openapi-ui</artifactId>
        <version>1.6.15</version> <!-- 适配SpringBoot2.7.x的稳定版本 -->
    </dependency>
    
  • 删除原有的@EnableSwagger2配置类,如需自定义API文档,使用SpringDoc的配置方式:
    @Configuration
    public class OpenApiConfig {
        @Bean
        public OpenAPI customOpenAPI() {
            return new OpenAPI()
                    .info(new Info().title("你的API文档")
                            .version("1.0")
                            .description("API功能描述"));
        }
    }
    
  • 重新打包WAR部署,访问地址改为http://localhost:8080/你的项目名/swagger-ui/index.html

3. 调整SpringBoot的Tomcat类加载配置

在继承SpringBootServletInitializer的启动类中添加类加载配置,解决Java17下的类加载冲突:

public class YourApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(YourApplication.class);
    }

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        // 禁用Tomcat并行类加载,避免Java17下的类加载异常
        servletContext.setInitParameter("org.apache.tomcat.util.scan.StandardJarScanFilter.jarsToSkip", "*");
        super.onStartup(servletContext);
    }
}

4. 升级Tomcat版本(可选)

Tomcat8.5对Java17仅提供实验性支持,官方推荐Tomcat9.0及以上版本完美兼容Java17,若条件允许可直接升级Tomcat版本,从根源解决兼容性问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:12:08