Swagger2 非全域性、無需重複輸入的Head引數(Token)配置
網路上關於Swagger2的教程多如牛毛,作為關於Swagger加入全域性head引數(如token)的文章也很多。例如:
但上述方案存在2個不足之處:
- 需要在每個介面下單獨輸入引數
- 全域性配置了引數,如果某些介面(如login等)不需要引數,則必須在改介面中通過annotation現實宣告,較為麻煩
綜上,選擇優化方案如下:
1.通過Swagger2的securitySchemes配置全域性引數:如下列程式碼所示,securitySchemes的ApiKey中增加一個名為“Authorization”,type為“header”的引數。
1234 | private List<ApiKey> securitySchemes |
2.在Swagger2的securityContexts中通過正則表示式,設定需要使用引數的介面(或者說,是去除掉不需要使用引數的介面),如下列程式碼所示,通過PathSelectors.regex(“^(?!auth).*$”),所有包含”auth”的介面不需要使用securitySchemes。即不需要使用上文中設定的名為“Authorization”,type為“header”的引數。
12345678 | private List<SecurityContext> securityContexts() { return newArrayList( SecurityContext.builder() .securityReferences(defaultAuth()) .forPaths(PathSelectors.regex("^(?!auth).*$")) .build() ); } |
設定完成後進入SwaggerUI,右上角出現“Authorization”按鈕,點選即可輸入我們配置的引數。
對於不需要輸入引數的介面(上文所述的包含auth的介面),在未輸入Authorization引數就可以訪問。
其他介面則將返回401錯誤。點選右上角“Authorization”按鈕,輸入配置的引數後即可訪問。引數輸入後全域性有效,無需每個介面單獨輸入。
至此,完成Swagger2 非全域性、無需重複輸入的Head引數配置。
Swagger2的相關完整程式碼如下(工程基於Springboot):
1234567891011121314151617181920212223242526272829303132333435363738 | public class Swagger { public Docket api() { return new Docket(DocumentationType.SWAGGER_2). useDefaultResponseMessages(false) .select() .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.regex("^(?!auth).*$")) .build() .securitySchemes(securitySchemes()) .securityContexts(securityContexts()) ; } private List<ApiKey> securitySchemes() { return newArrayList( new ApiKey("Authorization", "Authorization", "header")); } private List<SecurityContext> securityContexts() { return newArrayList( SecurityContext.builder() .securityReferences(defaultAuth()) .forPaths(PathSelectors.regex("^(?!auth).*$")) .build() ); } List<SecurityReference> defaultAuth() { AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; authorizationScopes[0] = authorizationScope; return newArrayList( new SecurityReference("Authorization", authorizationScopes)); }} | 2
轉載自:
http://fish119.site/2018/01/04/Swagger2-%E9%9D%9E%E5%85%A8%E5%B1%80Header%E5%8F%82%E6%95%B0%EF%BC%88Token%EF%BC%89%E9%85%8D%E7%BD%AE/