众所周知swagger在API文档生成及测试方面非常方便,但是很多的API调用都需要用到token验证,本文就介绍两中自动添加token的方法。以下的配置代码都是在swagger config类里边。
对每个API都添加header字段
这个方案的优点是每个API测试的时候都可以分别设置token,缺点是大量重复输入token字段,如果API数量众多或者写入header的字段多就很麻烦。
<code>@Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.platform.middle.user.base.web")) .paths(PathSelectors.any()) .build() .globalOperationParameters(defaultHeader()) ; } private static List<parameter> defaultHeader(){ ParameterBuilder appType = new ParameterBuilder(); appType.name("app-type").description("应用类型").modelRef(new ModelRef("string")).parameterType("header").required(false).build(); ParameterBuilder appToken = new ParameterBuilder(); appToken.name("app-token").description("令牌").modelRef(new ModelRef("string")).parameterType("header").required(false).build(); List<parameter> pars = new ArrayList<>(); pars.add(appType.build()); pars.add(appToken.build()); return pars; }/<parameter>/<parameter>/<code>
重点是在原先swagger的Docket对象后面添加***globalOperationParameters***方法。运行的效果如图:
![Swagger配置鉴权token](http://p2.ttnews.xyz/loading.gif)
认证用的token作为API的header类型输入参数
全站统一header设置
这种方案就简化了第一种方案,在swagger UI上出现一个Authorize按钮,一次输入header参数,全站使用。
<code>@Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.platform.middle.common.fastdfs.web")) .paths(PathSelectors.any()) .build() .securitySchemes(unifiedAuth()) ; } private static List<apikey> unifiedAuth() { List<apikey> arrayList = new ArrayList(); arrayList.add(new ApiKey("app-type", "app-type", "header")); arrayList.add(new ApiKey("app-token", "app-token", "header")); return arrayList; }/<apikey>/<apikey>/<code>
重点是在原先swagger的Docket对象后面添加***securitySchemes***方法。运行的效果如图:
![Swagger配置鉴权token](http://p2.ttnews.xyz/loading.gif)
统一header字段设置
这样就在每次调用API的时候把app-token、app-type作为header内容发送给服务端。服务端就可以用这些字段进行必要的认证。
閱讀更多 瘋冰無極 的文章