项目场景:
springBoot+springSecurity+swagger2, 访问http://localhost:8080/swagger-ui.html#/时出现:
‘
问题原因:
上图时springSecurity的filterChain,可以在类FilterChainProxy
中查看
http.antMatchers(whiteUrl).permitAll()
起作用的拦截器时最后一个FilterSecurityInterceptor
, 也就是说访问swagger的请求出现问题, 很可能是某个url被某个过滤器拦截了,尤其注意自定义的filter
。
解决方案:
如果是默认的过滤器FilterSecurityInterceptor
拦截的:
在配置访问白名单的时候将swagger相关路径添加进去,
String[] whiteUrl = new String[] {"/swagger-ui.html", "/swagger-resources/**",
"/v2/api-docs", "/webjars/springfox-swagger-ui/**" };
http.antMatchers(whiteUrl).permitAll()
注意下 /swagger-resources/**
后面的*号;
关键代码在DefaultFilterInvocationSecurityMetadataSource