Savagger-使用文档授权对URL的请求 [英] Swagger - Authorize request to url with documentation

查看:30
本文介绍了Savagger-使用文档授权对URL的请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道Swagger中是否有授权请求包含外部文档的URL的选项。

我有以下配置,我感兴趣的是urls[1]部分

springdoc.swagger-ui.urls[0].url=/v3/api-docs
springdoc.swagger-ui.urls[0].name=default
springdoc.swagger-ui.urls[1].url=https://asdasd.blob.core.windows.net/my-api/docs.spec
springdoc.swagger-ui.urls[1].name=additional

我可以从服务器访问文档(cURL直接从机器),但是从Swagger(所以浏览器)我不能。我想知道是否有一个选项来添加例如。Authorization Bearer xxxx到此请求或实际使服务器发出请求,而不是客户端。

澄清一下-我想从远程服务器获取带有OpenAPI定义的第二个文件,所以我说的是:

不是Authorize部分


我实施的解决方案:

海伦指出的方法是可行的--拦截请求并添加标头--然而,不幸的是,在我的例子中,还有一个与存储的防火墙设置有关的问题。只有来自服务器的流量,而不是客户端(浏览器)通过,所以我:

  1. 将URL设置为我的域中的内容
    springdoc.swagger-ui.urls[1].url=v3/api-docs/additional
  2. 为指向远程主机的URL指定了另一个属性
    mydomain.swagger-ui.additionalDocsUrl=...
  3. 实现了一个处理该url的自定义控制器-它作为服务器而不是客户端从远程获取json,以便防火墙通过
  4. 传递该请求
@Hidden
@RestController
@RequestMapping("/v3/api-docs/additional")
@RequiredArgsConstructor
public class AdditionalOpenApiController {

    @Value("${mydomain.swagger-ui.additionalDocsUrl}")
    private String additionalDocsUrl;

    @Cacheable(value = "ADDITIONAL_API_DOCS", unless = "#result != null")
    @GetMapping(produces = "application/json")
    public String getAdditionalDocs() {
        // in my case remote produces application/octet-stream so it needs to be byte[]
        return Optional.ofNullable(new RestTemplate().getForObject(additionalDocsUrl, byte[].class)) 
                .map(String::new)
                .orElseThrow(() -> new ResourceNotFoundException("Cannot load Additional OpenAPI from storage"));
}

推荐答案

这只能通过编程实现。

  • 首先:实现您自己的requestInterceptor:请参阅AbstractSwaggerIndexTransformer示例以编程方式实现您的请求(例如addCSRF方法)。
  • 第二,实现您自己的MySwaggerIndexPageTransformer,并将其定义为一个Spring Bean,它将被加载,而不是SpringDocSwaggerIndexPageTransformer

这篇关于Savagger-使用文档授权对URL的请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆