Swagger添加BasicAuth和OAuth2.0认证

一个没有添加认证的swagger配置类大概长这样

  @Bean
  public Docket docket() {
    return new Docket(DocumentationType.SWAGGER_2).host(swaggerHost)
        .groupName("demo")
        .apiInfo(getApiInfo())
        .select()
        //设置basePackage会将包下的所有被@Api标记类的所有方法作为api
        .apis(RequestHandlerSelectors.basePackage("com.example.web"))
        //只有标记了@ApiOperation的方法才会暴露出给swagger
        .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
        .paths(PathSelectors.any()).build();
  }

如果要添加Basic认证,只需要指定Docket的securitySchemes属性即可:

增加如下方法:

  private List<? extends SecurityScheme> securitySchemes() {
    return Arrays.asList(new BasicAuth("Authorization"));
  }

在build()后面添加:

.securitySchemes(securitySchemes());

重启后台,打开swagger-ui.html,右上角会多一个Authorization按钮,点击会出现用户名和密码的输入框。输入有效的用户密码即可完成认证。

如果当前系统采用的是oauth2.0认证方式,需同时指定Docket的securitySchemes属性和securityContext属性,添加如下代码,注意ApiKey是SecurityScheme的一个子类。

    private ApiKey apiKey() {
        return new ApiKey("Bearer", "Authorization", "header");
    }

    private SecurityContext securityContext() {
        return SecurityContext.builder().securityReferences(defaultAuth())
            .forPaths(PathSelectors.any()).build();
    }

    private List<SecurityReference> defaultAuth() {
        AuthorizationScope authorizationScope = new AuthorizationScope(
            "global", "accessEverything");
        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
        authorizationScopes[0] = authorizationScope;
        return Arrays.asList(new SecurityReference("Bearer",
            authorizationScopes));
    }

然后在build()后面添加:

.securitySchemes(Lists.newArrayList(apiKey()))
            .securityContexts(Arrays.asList(securityContext()));

重启后台,打开swagger-ui.html,右上角会多一个Authorization按钮,点击会出现Bearer token输入框:

value框输入Bearer+空格+你通过oauth2获取的accessToken,即可完成认证。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章