cotroller中使用SecurityContextHolder.getContext().getAuthentication()返回null值

本文分享了在使用OAuth2和Spring Security进行前后端分离开发过程中遇到的一个常见问题:在未受保护的接口中尝试获取authentication对象时出现空指针异常。通过分析,发现原因是该接口未被Spring Security保护,因此不会生成authentication对象。文章记录了解决过程,以避免未来重复错误。

昨晚按老师的要求准备一个简单的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/****下的资源
我保护的是/user/**下的资源

而我获取authentication的接口是不在保护之中的(/test/info)而我获取username的接口是不在保护之中的

现在回想,百度到的结果其实出现这个问题的原因也是如此,SpringSecurity版本的升级,保护资源的配置也更改了,导致旧版本的路径过滤不生效,也等于访问了没有受保护的资源,跟我出现null的原因就一样了。

记录一下,以免以后再犯

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值