黑马点评登录成功后点击【我的】会跳转到登录页面 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 中:

相关推荐
带多刺的玫瑰5 小时前
Leecode#4刷题之寻找两个正序数组的中位数
java·前端·算法
阿无,5 小时前
布隆过滤器
java·算法·哈希算法
Pocker_Spades_A5 小时前
飞算JavaAI 48分钟能做完Java全栈项目吗?
java·springboot·#ai编程·#飞算javaai·#java代码生成·#aicoding模型·#java开发
步行cgn6 小时前
MyBatis 一对多关联映射详解
java·后端
用户3126874877206 小时前
线程池到底怎么调?从源码看懂 ThreadPoolExecutor 的 7 个参数
java
SQL-First布道者6 小时前
持久层框架的评价标准:只有一个
java·spring boot·spring·tomcat·mybatis·spring jdbc
孔明click336 小时前
Sa-Token v1.46.0 发布 🚀,来看看有没有令你心动的功能!
java·sa-token·开源·springboot·权限认证
m0_587383007 小时前
智慧场馆解决方案实战指南:从系统架构到落地部署全解析
java·spring boot·架构·系统架构
ZC跨境爬虫7 小时前
LeetCode 13. 罗马数字转整数(多解法详解 + Java Python 实现)
java·python·leetcode
省长7 小时前
Sa-Token v1.46.0 发布 🚀,来看看有没有令你心动的功能!
java·后端·开源