上一节有解析使用swagger2生成在线文档的配置文章,但还不够完善,因为我们还需要模拟真实系统登录后携带token访问系统的配置,贴一下这些配置:
@Bean
public Docket createRestApi(){//规定扫描那些包下面的接口生成swagger文档
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.hhk.server.controller"))
.paths(PathSelectors.any())
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
.build()
// 给swagger添加全局配置(**下面两方法是本节添加的方法**)
.securityContexts(securityContexts())
.securitySchemes(securitySchemes());
}
然后我们需要实现一下securityContext和securitySchemes方法,先贴securityContexts:
private List<SecurityContext> securityContexts(){
// 设置需要登录认证的路径
List<SecurityContext> result=new ArrayList<>();
result.add(getContextByPath("/hello/.*"));
return result;
}
securitySchemes:
private List<ApiKey> securitySchemes(){
// 设置请求头信息
List<ApiKey> result=new ArrayList<>();
ApiKey apiKey=new ApiKey("Authorization","Authorization","Header");
result.add(apiKey);
return result;
}
上面的方法还引申出下面的方法:
private SecurityContext getContextByPath(String pathRegex) {
return SecurityContext.builder()
.securityReferences(defaultAuth())
.forPaths(PathSelectors.regex(pathRegex))
.build();
}
private List<SecurityReference> defaultAuth() {
List<SecurityReference> result=new ArrayList<>();
AuthorizationScope authorizationScope=new AuthorizationScope("global","accessEverything");
AuthorizationScope[] authorizationScopes=new AuthorizationScope[1];
authorizationScopes[0]=authorizationScope;
result.add(new SecurityReference("Authorization",authorizationScopes));
return result;
}
给文档配置全局认证token参考如上!!!