眾所周知swagger在API文件生成及測試方面非常方便,但是很多的API呼叫都需要用到token驗證,本文就介紹兩中自動新增token的方法。以下的配置程式碼都是在swagger config類裡邊。
對每個API都新增header欄位這個方案的優點是每個API測試的時候都可以分別設定token,缺點是大量重複輸入token欄位,如果API數量眾多或者寫入header的欄位多就很麻煩。
@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; }重點是在原先swagger的Docket物件後面新增***globalOperationParameters***方法。執行的效果如圖:
認證用的token作為API的header型別輸入引數
全站統一header設定這種方案就簡化了第一種方案,在swagger UI上出現一個Authorize按鈕,一次輸入header引數,全站使用。
@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; }
重點是在原先swagger的Docket物件後面新增***securitySchemes***方法。執行的效果如圖:
統一header欄位設定
這樣就在每次呼叫API的時候把app-token、app-type作為header內容傳送給服務端。服務端就可以用這些欄位進行必要的認證。
最新評論