背景
最近在参与开发框架的时候,利用swagger测试接口,接口加了权限,只有传入token之后才能调用接口,不然报401未登录。测试的时候调用多个接口的时候,每一个都需要复制token,感觉很麻烦,后来发现swagger是能够配置全局token的。
配置swagger
之前的配置
@RequiredArgsConstructor
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
@SuppressWarnings("all")
public Docket createRestApi() {
ParameterBuilder ticketPar = new ParameterBuilder();
List<Parameter> pars = new ArrayList<>();
ticketPar.name("Authorization").description("token")
.modelRef(new ModelRef("string"))
.parameterType("header")
.defaultValue("Bearer ")
.required(false)
.build();
pars.add(ticketPar.build());
return new Docket(DocumentationType.SWAGGER_2)
.directModelSubstitute(LocalDateTime.class, String.class)
.directModelSubstitute(Date.class, String.class)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("marchsoft"))
.paths(Predicates.not(PathSelectors.regex("/error.*")))
.build()
.globalOperationParameters(pars);
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.description("用户模块Apis")
.title("用户模块Apis")
.version("1.0.0")
.build();
}
}
加全局token的配置
@RequiredArgsConstructor
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
@SuppressWarnings("all")
public Docket createRestApi() {
ParameterBuilder ticketPar = new ParameterBuilder();
List<Parameter> pars = new ArrayList<>();
ticketPar.name("Authorization").description("token")
.modelRef(new ModelRef("string"))
.parameterType("header")
.defaultValue("Bearer ")
.required(false)
.build();
pars.add(ticketPar.build());
return new Docket(DocumentationType.SWAGGER_2)
.directModelSubstitute(LocalDateTime.class, String.class)
.directModelSubstitute(Date.class, String.class)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("marchsoft"))
.paths(Predicates.not(PathSelectors.regex("/error.*")))
.build()
.securitySchemes(securitySchemes())
.securityContexts(securityContexts());
}
private List<ApiKey> securitySchemes() {
List<ApiKey> apiKeyList = new ArrayList<>();
apiKeyList.add(new ApiKey("token", "Authorization", "header"));
return apiKeyList;
}
private List<SecurityContext> securityContexts() {
List<SecurityContext> securityContexts = new ArrayList<>();
securityContexts.add(
SecurityContext.builder()
.securityReferences(defaultAuth())
.forPaths(PathSelectors.regex("^(?!auth).*$"))
.build());
return securityContexts;
}
private 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("token", authorizationScopes));
return securityReferences;
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.description("用户模块Apis")
.title("用户模块Apis")
.version("1.0.0")
.build();
}
}
遇到的问题
配置全局token之后,不再添加 globalOperationParameters(pars) 配置