java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > swagger3.0实现https接口请求

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

作者: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.重启项目

总结

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

您可能感兴趣的文章:
阅读全文