swagger bearer+token全局认证的问题
最近swagger配置全局token上遇到了些问题,现在公司的项目中用的token并不是更强大的JWT,而且类型也不是bearer的,所以请求接口时直接输入token就可以了,但是如果使用的bearer类型的token,就得是Bearer token格式,中间会有空格,这样在swagger中配置token是就出问题了,我刚开始的配置方式是APIKEY的方式,虽然在swagger页面上输入token就能验证成功,如下图,
点击Authorization按钮认证,F12可以看到token 前面没有bearer。这样在测试其他需要权限的接口时必然时认证不通过返回401.
如果在全局认证时输入bearer token格式的话,会向下面这样
看看我的swagger配置
@Configuration
@EnableSwagger2
public class Swagger2Config {
@Bean
public Docket createRestApi(){
return new Docket(DocumentationType.SWAGGER_2)
.pathMapping("/")
.apiInfo(apiInfo())
.select()
// 加了ApiOperation注解的类,才生成接口文档
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
// 这个包下的类,才生成接口文档
.apis(RequestHandlerSelectors.basePackage("com.mall.user.controller"))
.paths(PathSelectors.any())
.build()
// 生产环境可以关闭
.enable(true)
.securitySchemes(security());
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("用户微服务接口Api")
.description("用户微服务api接口文档")
.version("1.0")
.build();
}
/**
* 这种方式没有bearer
* @return
*/
private List<ApiKey> security() {
List<ApiKey> apiKeyList= new ArrayList<ApiKey>();
apiKeyList.add(new ApiKey("Authorization", "Authorization", "header"));
return apiKeyList;
}
}
先退而求其次,选择在每次访问接口时都输入token
private List<Parameter> jwtToken(){
String jwt = "Bearer {jwt}";
ParameterBuilder tokenPar = new ParameterBuilder();
List<Parameter> pars = new ArrayList<>();
// 声明 key
tokenPar.name("Authorization")
.description("jwt令牌")
.modelRef(new ModelRef("String"))
.parameterType("header")
.defaultValue(jwt)
.required(false);
pars.add(tokenPar.build());
return pars;
}
public Docket createRestApi(){
return new Docket(DocumentationType.SWAGGER_2)
.pathMapping("/")
.apiInfo(apiInfo())
.select()
// 加了ApiOperation注解的类,才生成接口文档
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
// 这个包下的类,才生成接口文档
.apis(RequestHandlerSelectors.basePackage("com.mall.user.controller"))
.paths(PathSelectors.any())
.build()
//.securitySchemes(security()) 不会加bearer
// 生产环境可以关闭
.enable(true)
.globalOperationParameters(jwtToken());
}