Spring Security集成Knife4j访问授权问题及解决方案
大家好,我是欧阳方超,微信公众号同名。
1 问题描述
在使用Spring Security的Spring Boot项目中集成了Knife4j,虽然能够访问Knife4j首页,但是后台会报如下错误:
org.springframework.security.authentication.InsufficientAuthenticationException: Full authentication is required to access this resource
2 解决方案
2.1 配置放行路径
问题的核心在于如何配置放行路径,我们一般都会在SecurityConfig类的configure方法中添加如下一行代码:
.antMatchers("/swagger-ui/**", "/v2/api-docs/**", "/doc.html", "/swagger-resources/**", "/webjars/**", "/api-docs").permitAll()
但是上面的配置只适用于原始的swagger,也就是说完成上面的配置后,能实现即使不在请求头中添加认证信息也能方式接口列表页,且后台不会有报错。但是,在Knife4j中,我们一般是请求doc.html接口的路径来访问接口列表页,看似doc.html已经添加到放行路径中了,在请求时接口列表页时,虽然也能显示出来,但是后台会报错,报错信息在本文开头已提到。原因可能是这样的,观察了一下,在使用了Knife4j的情况下请求接口列表页时,会有一个以favicon.ico结尾的请求也发出去了,应该是这个请求触发了Spring Security报错。
原因找打之后把favicon.ico加入到放行路径中,
.antMatchers("/swagger-ui/**", "/v2/api-docs/**", "/doc.html", "/favicon.ico", "/swagger-resources/**", "/webjars/**", "/api-docs").permitAll()
重启项目,发现Spring Security报错消失。
3 总结
增加了 favicon.ico 的访问许可,通过以上配置和调整,应该能够解决Spring Security环境下Knife4j的访问授权问题。
我是欧阳方超,把事情做好了自然就有兴趣了,如果你喜欢我的文章,欢迎点赞、转发、评论加关注。我们下次见。