眾所周知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***方法。運行的效果如圖:
全站統一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***方法。運行的效果如圖:
這樣就在每次調用API的時候把app-token、app-type作為header內容發送給服務端。服務端就可以用這些字段進行必要的認證。
閱讀更多 瘋冰無極 的文章