将授权标头添加到 Springfox

Posted

技术标签:

【中文标题】将授权标头添加到 Springfox【英文标题】:Add authorization header to Springfox 【发布时间】:2017-05-24 05:42:57 【问题描述】:

我正在使用带有 Angular 2 前端的 spring boot,我想为我的 swagger 配置添加授权。

我当前的 springfox 设置如下:

@Configuration
@EnableSwagger2
public class SwaggerConfig 

    @Bean
    public Docket api()  
        return new Docket(DocumentationType.SWAGGER_2)

          .select()                                  
          .apis(RequestHandlerSelectors.basePackage("mybasepackage"))
          .paths(PathSelectors.ant("/api/*"))

          .build();                                           
    


我的应用程序使用 JWT 过滤器进行授权,我希望 swagger 使用令牌,只要它在用户浏览器中没有过期。

我看到我可以像这样在 html 文件中添加:

function addApiKeyAuthorization() 
  var key = JSON.parse(localStorage.getItem("ls.authentication-token"));
  if (key && key.trim() != "") 
    var apiKeyAuth = new SwaggerClient.ApiKeyAuthorization("Authorization", "Bearer " + key, "header");
    window.swaggerUi.api.clientAuthorizations.add("bearer", apiKeyAuth);
    log("Set bearer token: " + key);
  
 

因为我使用的是 Springfox,所以我没有这个选项。有没有办法可以通过 Docket api 添加它?

【问题讨论】:

为什么你没有那个选项,因为你使用的是 springfox? 它正在生成 HTML 文件 【参考方案1】:

我有两个依赖项,springfox-swagger2 和 springfox-swagger-ui。我最终删除了 springfox-swagger-ui 依赖项。

Jhipster 使用了一个示例,他们从 springfox-swagger2 对打包的 swagger 文件进行 Get 调用。我可以通过一些小的改动来使用这个例子。

我将 swagger-ui 配置添加到我的公用文件夹中。由于我现在使用的是 HTML 文件而不是生成它,因此我可以使用 javascript 来设置我的 JWT 令牌。

我的令牌没有存储在 JSON 中,所以我这样做了:

var key = localStorage.getItem("MyTokenName");

而不是

var key = JSON.parse(localStorage.getItem("MyTokenName"));

【讨论】:

【参考方案2】:

为了将您的 JWT 令牌添加到 Authorization 标头中,请在您的 SwaggerConfig 类中添加以下 bean:

@Bean
public SecurityConfiguration security() 
    return new SecurityConfiguration(null, // "client id",
            null, // "client secret",
            null, // "realm",
            null, // "app",
            "Bearer " + yourToken, ApiKeyVehicle.HEADER, "Authorization", "," /* scope separator */);

您可以找到更多信息here。

【讨论】:

查看文档的 2.1.3 Springfox-swagger2 with Spring MVC and Spring Boot 章节,也许它会有所帮助。这个 SecurityConfiguration bean 声明在我的 spring mvc + spring security + swagger + jwt 实现中工作。

以上是关于将授权标头添加到 Springfox的主要内容,如果未能解决你的问题,请参考以下文章

骆驼如何将授权标头添加到休息路线?

将授权标头添加到 WCF 基架 SOAP Web 服务

将授权标头添加到单击的链接

AJAX 调用后添加授权标头

如何将授权标头添加到 Angular http 请求?

如何将授权标头添加到用户请求并使用 express 将其代理到另一个服务器 api