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的,要培养大局观和每一个微小的习惯!
以上只是个人粗俗的理解,有些诠释的不好,接受批评指正。

你可能感兴趣的:(java,java-解决问题,java)