域名配置SSL证书后Spring Boot项目Swagger接口文档无法访问如何解决
问题根因
配置HTTPS后Swagger UI默认仍使用HTTP协议发起接口请求,浏览器会拦截HTTP/HTTPS混合内容请求,最终触发TypeError: Failed To Fetch报错。
解决方案
1. 修改Swagger配置指定HTTPS协议
调整你的SwaggerConfig类中Docket Bean的配置,显式指定使用HTTPS协议,配置示例如下:
@Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2).select() .apis(RequestHandlerSelectors.any()).paths(PathSelectors.any()).build() .apiInfo(apiInfo()).securitySchemes(Lists.newArrayList(apiKey())) .securityContexts(Arrays.asList(securityContext())) // 新增以下配置 .protocols(new HashSet<>(Arrays.asList("https"))) // 替换为你自己的服务域名 .host("your-domain.com"); }
注意:如果你的Spring Boot服务是直接配置SSL证书而非通过反向代理实现HTTPS,需要在Swagger的host配置中带上对应的HTTPS端口,如
host("your-domain.com:8443")
2. 配置Spring Boot支持反向代理头
如果你的HTTPS是通过Nginx等反向代理配置的,需要在application.yml中添加以下配置,让Spring Boot可以正确识别代理传递的HTTPS协议头:
server: forward-headers-strategy: native # 低版本Spring Boot使用下面的配置 # use-forward-headers: true
同时需要在Nginx的站点配置中添加以下头传递规则:
proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme;
3. 检查跨域配置
如果你的服务配置了CORS跨域规则,需要确保允许HTTPS域名访问,不要写死HTTP协议的域名,建议使用allowedOriginPatterns匹配所有合法域名:
@Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOriginPatterns("*") .allowedMethods("*") .allowedHeaders("*") .allowCredentials(true); }
以上配置调整完成后重启服务,清空浏览器缓存重新访问Swagger即可恢复正常。
内容的提问来源于stack exchange,提问作者James Cologne
相关产品推荐
相关产品推荐

