swagger关闭/v2/api-docs仍然可以访问漏洞 springboot如何通过代码动态闭
时间: 2023-11-29 21:05:10 浏览: 263
swagger-api-docs:swagger-api-docs
要通过代码动态关闭Swagger的/v2/api-docs端点,可以使用Spring Boot的`WebMvcConfigurer`接口来实现。您可以创建一个类,实现`WebMvcConfigurer`接口,并覆盖`addResourceHandlers`方法。在这个方法中,您可以添加一个拦截器,用于阻止对/v2/api-docs的访问。以下是一个示例代码:
```
@Configuration
@EnableWebMvc
public class SwaggerConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/swagger-ui/**").addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/")
.resourceChain(false)
.addResolver(new PathResourceResolver() {
@Override
protected Resource getResource(String resourcePath, Resource location) throws IOException {
Resource requestedResource = location.createRelative(resourcePath);
return requestedResource.exists() && requestedResource.isReadable() ? requestedResource : new ClassPathResource("/META-INF/resources/webjars/springfox-swagger-ui/index.html");
}
});
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new HandlerInterceptor() {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (request.getRequestURI().equals("/v2/api-docs")) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
return false;
}
return true;
}
});
}
}
```
在这个示例中,`addResourceHandlers`方法用于配置Swagger UI的资源处理器,`addInterceptors`方法用于添加一个拦截器,用于阻止对/v2/api-docs的访问。这个拦截器会检查请求的URI是否为/v2/api-docs,如果是,则返回404错误。通过这种方式,就可以在代码中动态关闭Swagger的/v2/api-docs端点了。
阅读全文