SecurityUtils.getUser()获取为空的场景

背景

1一直以来使用SecurityUtils.getUser()来获取当前登录用户,没想过为什么可以获取当前登录用户的信息

 Object principal = authentication.getPrincipal();
        if (principal instanceof LoginUser) {
            return (LoginUser) principal;
        }

2项目使用oauth2,所有接口都需要登录认证

解决

1pom文件中添加了依赖热部署

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
            <scope>runtime</scope>
        </dependency

这个依赖是为了当时方便开发使用,能实时热部署就不用每次重启,但是这个依赖有问题,去掉依赖之后SecurityUtils.getUser()获取就不为空了
2排除第一个问题之后,当前接口还是SecurityUtils.getUser()获取为空,这时候进入断点发现执行的是以下代码。

       Object principal = authentication.getPrincipal();
        if (principal instanceof LoginUser) {
            return (LoginUser) principal;
        }

也就是说走的是admin微服务的Authentication权限校验,判断是否是LoginUser对象,那什么情况会获取authentication这个有差异呢?
想到了是否对该接口有进行其他的配置,
于是找到了nacos,发现security-》oauth2-》client-》ignore-urls对该接口的进行了ignore-urls配置,也就是忽略该接口,不需要验证登录,就获取authentication的信息跟普通情况有差异,所以SecurityUtils.getUser()获取为空
3使用@Scheduled定时任务的时候,也是获取不到的
4使用注解@inner(value=false) ,SecurityUtils.getUser()也获取不到用户信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

耳东哇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值