Savagger-使用文档授权对URL的请求 [英] Swagger - Authorize request to url with documentation
本文介绍了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
部分
我实施的解决方案:
海伦指出的方法是可行的--拦截请求并添加标头--然而,不幸的是,在我的例子中,还有一个与存储的防火墙设置有关的问题。只有来自服务器的流量,而不是客户端(浏览器)通过,所以我:- 将URL设置为我的域中的内容
springdoc.swagger-ui.urls[1].url=v3/api-docs/additional
- 为指向远程主机的URL指定了另一个属性
mydomain.swagger-ui.additionalDocsUrl=...
- 实现了一个处理该url的自定义控制器-它作为服务器而不是客户端从远程获取json,以便防火墙通过
@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屋!
查看全文