Swagger关于令牌校验
一、需求
微服务oauth2校验令牌,通过Swagger2的securitySchemes配置全局token参数,也可以创建一个默认测试用户默认启动时候登陆获取永久期限的令牌。
二、swagger配置实现
@Configuration
@EnableSwagger2
public class SwaggerConfig {
/**
* 创建一个Docket对象
* 调用select()方法,
* 生成ApiSelectorBuilder对象实例,该对象负责定义外漏的API入口
* 通过使用RequestHandlerSelectors和PathSelectors来提供Predicate,在此我们使用any()方法,将所有API都通过Swagger进行文档管理
*
* @return
*/
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.xxx"))
.paths(PathSelectors.any())
.build()
.securitySchemes(securitySchemes())
.securityContexts(securityContexts())
.globalOperationParameters(globalOperationParameters());
}
private List<Parameter> globalOperationParameters(){
//添加默认head参数Authorization
ParameterBuilder tokenPar = new ParameterBuilder();
List<Parameter> pars = new ArrayList<Parameter>();
tokenPar.name("Authorization").defaultValue("Bearer ").description("令牌").modelRef(new ModelRef("string")).parameterType("header").required(false).build();
pars.add(tokenPar.build());
return pars;
}
private List<ApiKey> securitySchemes() {
List<ApiKey> apiKeyList = new ArrayList();
apiKeyList.add(new ApiKey("Authorization", "Authorization", "header"));
return apiKeyList;
}
private List<SecurityContext> securityContexts() {
List<SecurityContext> securityContexts = new ArrayList<>();
//通过PathSelectors.regex("^(?!auth).*$"),排除包含"auth"的接口不需要使用securitySchemes
securityContexts.add(
SecurityContext.builder()
.securityReferences(defaultAuth())
.forPaths(PathSelectors.regex("^(?!auth).*$"))
.build());
return securityContexts;
}
List<SecurityReference> defaultAuth() {
AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = authorizationScope;
List<SecurityReference> securityReferences = new ArrayList<>();
securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
return securityReferences;
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
//标题
.title("gold-mall-biz使用Swagger2构建RESTful APIs")
//简介
.description("")
//服务条款
.termsOfServiceUrl("")
//作者个人信息
.contact(new Contact("xxx", "", "xxx@163.com"))
//版本
.version("1.0")
.build();
}
}
设置完成后进入SwaggerUI,右上角出现“Authorization”按钮,输入令牌对于除上文所述的包含auth的接口结果都会带上token。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。