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

如何解决生产环境中Swagger UI的混合内容错误?

Springdoc OpenAPI 3生产环境混合内容调用错误

近期从SpringFox 2迁移到Springdoc + OpenAPI 3,本地运行正常且性能更优,但部署到生产环境后,Swagger UI页面能正常打开,但调用API时出错,浏览器控制台提示:

Mixed Content: The page at 'https:///swagger-ui/index.html#/Ravel/getLabelFormats' was loaded over HTTPS, but requested an insecure resource 'http:///labels?language=10&includeData=false'. This request has been blocked; the content must be served over HTTPS.

现有配置

CORS配置

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("swagger-ui.html")
            .addResourceLocations("classpath:/META-INF/resources/");

    registry.addResourceHandler("/webjars/**")
            .addResourceLocations("classpath:/META-INF/resources/webjars/");
}

@Override
public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/**").allowedOrigins("*");
}

POM依赖

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-ui</artifactId>
    <version>1.6.9</version>
</dependency>

<dependency>
    <groupId>io.swagger.core.v3</groupId>
    <artifactId>swagger-annotations</artifactId>
    <version>2.2.8</version>
</dependency>

<dependency>
    <groupId>io.swagger.core.v3</groupId>
    <artifactId>swagger-models</artifactId>
    <version>2.2.8</version>
</dependency>

<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-handler</artifactId>
    <version>4.1.79.Final</version>
</dependency>

application.yml配置

springdoc:
  swagger-ui:
    enabled: true
    disable-swagger-default-url: true
  api-docs:
    path: /v3/api-docs

当前环境:Java 8、Spring Boot 2.7.8


解决方案

问题核心是生产环境用HTTPS访问Swagger UI,但OpenAPI生成的接口地址是HTTP,触发浏览器混合内容拦截。可通过以下方式修复:

1. 直接配置Springdoc服务器地址

在application.yml中指定生产环境的HTTPS服务器地址:

springdoc:
  swagger-ui:
    enabled: true
    disable-swagger-default-url: true
  api-docs:
    path: /v3/api-docs
  servers:
    - url: https://<myproductionAPIUrl>
      description: Production Server

2. 代码配置OpenAPI实例

创建配置类手动设置服务器地址:

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.servers.Server;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.List;

@Configuration
public class OpenApiConfig {

    @Bean
    public OpenAPI customOpenAPI() {
        return new OpenAPI()
                .servers(List.of(new Server().url("https://<myproductionAPIUrl>")));
    }
}

3. 适配反向代理场景

如果生产环境有Nginx等反向代理,配置Spring Boot识别外部HTTPS请求头:

server:
  forward-headers-strategy: FRAMEWORK
  tomcat:
    remote-ip-header: X-Forwarded-For
    protocol-header: X-Forwarded-Proto

同时确保反向代理传递正确的头信息,示例Nginx配置片段:

location / {
    proxy_pass http://your-backend-server;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-For $remote_addr;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 13:57:51