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 中:
