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

相关推荐
三8445 小时前
Fastjson 漏洞 · 02 · autoType 机制与 checkAutoType
java·fastjson
无限码力6 小时前
小红书笔试真题 9.17 - 待发热度重排(C++/Py/Java /Js/Go)
java·小红书·小红书笔试真题·小红书技术岗笔试真题
卓怡学长6 小时前
w194基于ssm新能源汽车充电系统小程序
java·小程序·intellij-idea
JAVA面经实录9176 小时前
Java高级后端 · 全套面试通关手册(MySQL)
java·mysql·面试
光依旧6 小时前
MCP实战手记(八):从“能跑“到“能上线“——无状态MCP Server的生产落地清单
java·人工智能·spring boot·架构·ai agent·mcp
弹简特7 小时前
【Java项目-企悦抽】15-活动管理模块02-活动创建测试与活动列表实现
java·开发语言·springboot
斯内普吖7 小时前
(开源)水果蔬菜商城实战指南 基于 Java + SSM + Vue + MySQL
java·vue.js·mysql·开源
wang_shu_mo_ran7 小时前
Spring IoC和DI概念篇
java·后端·spring
小狼154548 小时前
拼多多订单数据导出 CSV 实战:接口分页、字段平铺与 5 个数据坑,多多开票助手
java·前端·javascript