黑马点评登录成功后点击【我的】会跳转到登录页面 BUG 修复

BUG 说明:用验证码登录成功后,点击【我的】会直接跳转到登录页面,而非是个人信息展示页面,正常应该是跳转到个人信息页面。

分析原因:

查看前端代码文件 login.html 会发现登录成功后会跳转到首页 index.html。

进入首页会发送一些请求,其中关于热门文章的请求到后端,后端处理这个请求可能会爆出空指针异常:

后端处理该请求时报出空指针异常:

分析后端处理代码:

java 复制代码
@GetMapping("/hot")
public Result queryHotBlog(@RequestParam(value = "current", defaultValue = "1") Integer current) {
    // 根据用户查询
    Page<Blog> page = blogService.query()
    .orderByDesc("liked")
    .page(new Page<>(current, SystemConstants.MAX_PAGE_SIZE));
    // 获取当前页数据
    List<Blog> records = page.getRecords();
    // 查询用户
    records.forEach(blog ->{
        // userId 也没有判断是否存在
        Long userId = blog.getUserId();
        // 并没有判断用户是否存在,可能无此用户
        User user = userService.getById(userId);
        blog.setName(user.getNickName());
        blog.setIcon(user.getIcon());
    });
    return Result.ok(records);
}

使用遍历并没有判断用户是否存在,而直接获取其属性,如果用户为空就会报错。

修复代码如下:

java 复制代码
@GetMapping("/hot")
public Result queryHotBlog(@RequestParam(value = "current", defaultValue = "1") Integer current) {
    // 根据用户查询
    Page<Blog> page = blogService.query()
    .orderByDesc("liked")
    .page(new Page<>(current, SystemConstants.MAX_PAGE_SIZE));
    // 获取当前页数据
    List<Blog> records = page.getRecords();
    // 查询用户
    records.forEach(blog ->{
        Long userId = blog.getUserId();
        if (userId == null) {
            return;
        }

        User user = userService.getById(userId);
        // 判断用户是否存在
        if (user == null) {
            return;
        }

        blog.setName(user.getNickName());
        blog.setIcon(user.getIcon());
    });
    return Result.ok(records);
}

修改完后重启后端服务,重新测试发现登录成功后,点击【我的】就不会跳转到登录页面,而是看到用户个人信息。

但是个人信息页面 info.html 有关跳转到登录页面的代码,测试完发现并没有问题,可能就是出现在拦截器代码那部分,有兴趣的同学可以测试一下。

拦截器有关跳转到登录页面的代码,该代码位于 common.js 中:

相关推荐
wuyikeer2 小时前
Java进阶——IO 流
java·开发语言·python
fengxin_rou2 小时前
JVM 内存结构与内存溢出 / 泄漏问题全解析
java·开发语言·jvm·分布式·rabbitmq
城俊BLOG2 小时前
C++的注册机制和插件系统
java·服务器·c++
Try,多训练2 小时前
软件设计师备考第一性原理分析
java·经验分享·学习方法
Seven972 小时前
Tomcat Container容器之Engine:StandardEngine
java
jinanwuhuaguo2 小时前
(第三十六篇)OpenClaw 去中心化的秩序——从“中心调度”到“网格自治”的治理革命
java·大数据·开发语言·网络·docker·去中心化·github
AI进化营-智能译站7 小时前
ROS2 C++开发系列17-多线程驱动多传感器|chrono高精度计时实现机器人同步控制
java·c++·ai·机器人
qq_5895681011 小时前
springbootweb案例,出现访问 http://localhost:8080/list 一直处于浏览器运转阶段
java·网络协议·http·list·springboot
JAVA面经实录91711 小时前
计算机基础(完整版·超详细可背诵)
java·linux·数据结构·算法