Swagger UI将身份验证令牌传递给标头中的API调用

Jav*_*a P 21 rest jersey swagger swagger-ui

我是Swagger的新手.

我正在使用Swagger UI生成swagger文档.我有两个API调用.第一个调用是根据用户名和密码生成令牌.第二次呼叫需要第一次呼叫生成的令牌.

我如何使用Swagger UI为第二次调用设置该令牌?

cas*_*lin 27

@ApiImplicitParams@ApiImplicitParam应该做的伎俩:

@GET
@Produces("application/json")
@ApiImplicitParams({
    @ApiImplicitParam(name = "Authorization", value = "Authorization token", 
                      required = true, dataType = "string", paramType = "header") })
public String getUser(@PathParam("username") String userName) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

文档:

您可能希望手动描述操作参数.这可能有多种原因,例如:

  • 使用不使用JAX-RS注释的Servlet.
  • 想要隐藏定义的参数,并使用完全不同的定义覆盖它.
  • 描述在到达JAX​​-RS实现之前过滤器或其他资源使用的参数.

Swagger UI将会更新,您可以从那里发送令牌.不需要对HTML进行任何更改.


注意:不久前,在使用Swagger记录REST API时,我意识到仅仅添加@ApiImplicitParam是不够的(即使您只有一个参数).无论如何,你必须添加@ApiImplicitParams.


Rzv*_*van 8

我的2.9.2 Swagger版本配置在 Swagger UI 上添加授权并发送 Bearer 令牌

    @Configuration
    public class SwaggerConfiguration{

        //...

          @Bean
          public Docket api(ServletContext servletContext) {
            return new Docket(DocumentationType.SWAGGER_2)...
                .securitySchemes(Arrays.asList(apiKey()))
                .securityContexts(Collections.singletonList(securityContext()));
          }

          private SecurityContext securityContext() {
            return SecurityContext.builder().securityReferences(defaultAuth()).forPaths(PathSelectors.regex("/.*")).build();
          }

          private List<SecurityReference> defaultAuth() {
            final AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
            final AuthorizationScope[] authorizationScopes = new AuthorizationScope[]{authorizationScope};
            return Collections.singletonList(new SecurityReference("Bearer", authorizationScopes));
          }

          private ApiKey apiKey() {
            return new ApiKey("Bearer", "Authorization", "header");
          }
    } 
Run Code Online (Sandbox Code Playgroud)


Mic*_*ski 7

另一种选择是添加globalOperationParameters. 它将在每个端点添加一个授权字段。

定义授权头参数:

Parameter authHeader = new ParameterBuilder()
  .parameterType("header")
  .name("Authorization")
  .modelRef(new ModelRef("string"))
  .build();
Run Code Online (Sandbox Code Playgroud)

将其添加到Docket配置中:

return new Docket(DocumentationType.SWAGGER_2)
    .select()
    .apis(...)
    .paths(...)
    .build()
    .apiInfo(...)
    .globalOperationParameters(Collections.singletonList(authHeader));
Run Code Online (Sandbox Code Playgroud)

它看起来像这样: 在此处输入图片说明