SecurityUtils.getUser()获取为空

编程入门 行业动态 更新时间:2024-10-27 13:33:09

SecurityUtils.getUser()获取<a href=https://www.elefans.com/category/jswz/34/1771092.html style=为空"/>

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()获取为空

心得

平常看起来不起眼的偷懒还是别偷懒了,老老实实的按照规范走,前人总结出来的不是没有道理的!如果当初就按照规范在每个controller中编写相应的方法,是不会出现今天的问题的。而配置ignore-urls也是业务需要,绕过Auth的,要培养大局观和每一个微小的习惯!
以上只是个人粗俗的理解,有些诠释的不好,接受批评指正。

更多推荐

SecurityUtils.getUser()获取为空

本文发布于:2023-11-15 19:30:17,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1605058.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:为空   SecurityUtils   getUser

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!