问题重现
SpringSecurityConfig配置登录验证拦截,并放行登录验证及生成二维码的url。
调用postman 测试接口,发现可以获取验证码。
但当进行登录验证的时候就报了403错误,没有走过滤器,而是是直接走了配置中的accessDeniedHandler方法,返回403。
当使用get接口发现走了过滤器,但是因为SpringSecurity规定了登录验证必须走post,所以登录失败。但为什么post方法直接走403呢?
原因
后来查阅资料发现,因为SpringSecurity开启了CSRF跨站防护,(SpringSecurity在2.0之后就会默认自动开启)。一旦开启了CSRF,所有经过springsecurity的http请求以及资源都被会CsrfFilter拦截,仅仅GET|HEAD|TRACE|OPTIONS这4类方法会被放行,也就是说post,delete等方法依旧是被拦截掉的,限制了除了get以外的大多数方法,报出403错误。需要关闭CSRF,post请求才会被接收。
解决方法
1、关闭CSRF跨站防护
http.csrf().disable();
2、开启CSRF,设置将令牌存入cookie中。在post请求头带入令牌参数进行提交。(最佳选择)
http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
文章来源:https://www.toymoban.com/news/detail-504794.html
搞定。文章来源地址https://www.toymoban.com/news/detail-504794.html
到了这里,关于SpringSecurity登录验证没有权限的问题(403)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!