昨晚按老师的要求准备一个简单的oauth2授权+资源服务器用来学习vue+axios前后端分离开发。在controller里尝试获取username的时候居然空指针异常了,明明是拿之前整合的代码来用的说。
定位到authentication为null,为啥呢,明明token都能正常拿到的

然后我傻fufu的居然尝试从session中获取

我在postman里用token测试,sessio里自然没有SPRING_SECURITY_CONTEXT。
果不其然,也是空指针null;

百度到的很多结果都是旧版本的springsecurity升级新版本才出现(也可能是我关键词没选好)
最后还是在Google找到了原因:只有访问受保护的资源才会产生authentication对象
Spring Security getAuthentication() returns null
我保护的是**/user/****下的资源

而我获取authentication的接口是不在保护之中的(/test/info)
现在回想,百度到的结果其实出现这个问题的原因也是如此,SpringSecurity版本的升级,保护资源的配置也更改了,导致旧版本的路径过滤不生效,也等于访问了没有受保护的资源,跟我出现null的原因就一样了。
记录一下,以免以后再犯
本文分享了在使用OAuth2和Spring Security进行前后端分离开发过程中遇到的一个常见问题:在未受保护的接口中尝试获取authentication对象时出现空指针异常。通过分析,发现原因是该接口未被Spring Security保护,因此不会生成authentication对象。文章记录了解决过程,以避免未来重复错误。
2362

被折叠的 条评论
为什么被折叠?



