swagger3.0实现https接口请求全过程

 更新时间:2026年01月01日 16:03:58   作者:stjl.xyz  
文章描述了在开发过程中遇到Swagger拦截器配置错误的问题,并通过自定义Swagger拦截器解决了该问题,最后重启项目以应用更改

swagger3.0实现https接口请求

1.场景复现

2.解决方法 

自定义swagger拦截器

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.servers.Server;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import springfox.documentation.oas.web.OpenApiTransformationContext;
import springfox.documentation.oas.web.WebMvcOpenApiTransformationFilter;
import springfox.documentation.spi.DocumentationType;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;

@Component
public class SpringFoxSwaggerHostResolver implements WebMvcOpenApiTransformationFilter {

    private final static String LOCALHOST = "localhost:8009";
    private final static String ZC = "zc.chenxin6.com";
    @Override
    public OpenAPI transform(OpenApiTransformationContext<HttpServletRequest> context) {

        HttpServletRequest request = context.request().get();

        OpenAPI swagger = context.getSpecification();

        String scheme = "http";
        String referer = request.getHeader("Referer");

        if(StringUtils.hasLength(referer)){
            //获取协议
            scheme = referer.split(":")[0];
        }

        List<Server> servers = new ArrayList<>();
        String finalScheme = scheme;
        //重新组装server信息
        swagger.getServers().forEach(item->{

            //替换协议,去掉默认端口
            item.setUrl(clearDefaultPort(item.getUrl().replace("http", finalScheme)));
            servers.add(item);
        });
        swagger.setServers(servers);
        return swagger;
    }

    //替换成线上的域名
    private String clearDefaultPort(String url){
        if (url.contains(LOCALHOST)) {
            return url.replace(LOCALHOST,ZC);
        }
        return url;
    }

    @Override
    public boolean supports(DocumentationType documentationType) {
        return documentationType.equals(DocumentationType.OAS_30);
    }
}

3.重启项目

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java简单实现复制 粘贴 剪切功能代码分享

    java简单实现复制 粘贴 剪切功能代码分享

    本文给大家分享了一段java编写的简单实现复制粘贴剪切功能的代码,需要的小伙伴可以直接拿走使用。如有更好的方案,也可以告之本人。
    2014-11-11
  • SpringMVC Json自定义序列化和反序列化的操作方法

    SpringMVC Json自定义序列化和反序列化的操作方法

    这篇文章主要介绍了SpringMVC Json自定义序列化和反序列化的操作方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • 使用RestTemplate访问https实现SSL请求操作

    使用RestTemplate访问https实现SSL请求操作

    这篇文章主要介绍了使用RestTemplate访问https实现SSL请求操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • SpringBoot处理HTTP请求的详细流程

    SpringBoot处理HTTP请求的详细流程

    这篇文章主要介绍了SpringBoot处理HTTP请求的详细流程,文中通过代码示例给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-05-05
  • java String.join()方法实例详解

    java String.join()方法实例详解

    String.join()是Java提供的一个实用方法,用于将多个字符串按照指定的分隔符连接成一个字符串,这一方法是Java8中引入的,极大地简化了字符串拼接的操作,本文给大家介绍java String.join()方法,感兴趣的朋友一起看看吧
    2025-06-06
  • java 矩阵乘法的mapreduce程序实现

    java 矩阵乘法的mapreduce程序实现

    这篇文章主要介绍了java 矩阵乘法的mapreduce程序实现的相关资料,需要的朋友可以参考下
    2017-06-06
  • mybatis 获取更新(update)记录的id之<selectKey>用法说明

    mybatis 获取更新(update)记录的id之<selectKey>用法说明

    这篇文章主要介绍了mybatis 获取更新(update)记录的id之<selectKey>用法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • Spring AI提示词的四种使用方法分享

    Spring AI提示词的四种使用方法分享

    提示词是输入给大模型(LLM)的文本指令,用于明确地告诉大模型你想要解决的问题或完成的任务,也是大语言模型理解用户需求并生成准确答案的基础,那问题来了,在Spring AI如何用好提示词?以及提示词的使用方式有哪些呢?接下来本文一起来盘点一下
    2025-06-06
  • Java基础知识杂文

    Java基础知识杂文

    这篇文章主要介绍了Java基础知识杂文,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • Java多种文件复制方式以及效率对比分析

    Java多种文件复制方式以及效率对比分析

    本文总结了Java复制文件的多种方式,包括传统的字节流、字符流、NIO系列、第三方包中的FileUtils等,并提供了不同方式的效率比较,同时,还介绍了遍历文件和文件夹的方法,并使用Swing进行了简单的图形界面展示,通过实际测试,对比了不同方法的性能,提供了参考
    2025-11-11

最新评论