项目场景:
spring-boot集成 swagger + Knife4j 时 添加拦截器 WebMvcConfigurer 时 swagger 无法请求。
下面是我成功后的代码
@Component
public class WebMvcConfiguration implements WebMvcConfigurer {
@Autowired
private LoginAuthInterceptor loginAuthInterceptor;
@Autowired
private UserProperties userProperties;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html", "doc.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginAuthInterceptor)
.excludePathPatterns(userProperties.getNoAuthUrls())
.addPathPatterns("/**")
.excludePathPatterns("/swagger-ui.html/**")
.excludePathPatterns("/swagger-resources/**")
.excludePathPatterns("/webjars/**")
.excludePathPatterns("/doc.html", "/v3/**");
}
}
注意点
当你的 swagger 是 v.2 的时候 你的请求中有一个
/v2/api-docs
当你的 swagger 是 v.3的时候,你的请求中有一个
/v3/api-docs
所以根据你的 swagger 添加方法
// swagger v.3
.excludePathPatterns("/v3/**");
// swagger v.2
.excludePathPatterns("/v2/**");
就好使了。( •̀ ω •́ )y