有时候出于安全考虑,想要过滤Swagger UI前端展示的部分API。
此时仅需要修改swaggerConfig即可:
@EnableSwagger2
public class Swagger2Config {
private static final List<String> excludedPathPrefix = Arrays.asList(
"/path1",
"/path2",
"/path3"
);
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.dfc.iomp.provider.controller"))
.paths((s) -> {
for(String pathPrefix : excludedPathPrefix) {
if(StringUtils.startsWith(s, pathPrefix)) {
return false;
}
}
return true;
})
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("API说明文档")
.version("1.0")
.build();
}
}
如上所示,在 createRestApi 方法中,声明paths时,需要传入一个 Predicate 的接口。
一般常规用法是直接 传入 PathSelectors.any() 以匹配所有的路径。
实质上,仅需要传入一个 java.util.function.Predicate 的具体实现即可,这里用 lamba表示可以清晰表示,对每个URL做校验。
PS: 因为本例子用的校验方式是 startWith, 所以声明需要被排除的路径时,必须以 / 开头。
PS2: 可以根据需要自定义 Predicate