退出登录仍然显示用户名

问题在与使用LocalThread与request的生命周期不吻合,解决方案如下:

@Autowired
private TicketService ticketService;
@Autowired
private UserService userService;
@RequestMapping(path = {"/index"}, method = {RequestMethod.GET})
public String bookList(Model model, @CookieValue("t")String t) {
//User host = hostHolder.getUser();
// 修改 2019.04.06 LocalThread生命周期与request差异巨大
//判断 t票是否存在, 来判断是否已经登录
User host = null;
Ticket ticket = ticketService.getTicket(t);
if (ticket != null){
host = userService.getUser(ticket.getUserId());
}
if (host != null) {
model.addAttribute("host", host);
}
loadAllBooksView(model);
return "book/books";
}

替换该请求即可,该请求位于 com.nowcoder.project.controllers.BookController

#Java##笔记#
全部评论
这个项目讲解文档顺序问题,后面设置的拦截器HostInfoInterceptor中在每一次请求中都从Cookie中提取ticket然后去数据库查询用户将用户setHost到ThreadLocal中了。 讲解文档没有看到后面,之前运行的请求login和books是不同线程,无法获得互相ThreadLocal中的值。
点赞 回复
分享
发布于 2019-10-25 15:31
启用CookieUtils类中的removeCookie方法即可!
点赞 回复
分享
发布于 2021-03-17 19:23
滴滴
校招火热招聘中
官网直投

相关推荐

3 收藏 评论
分享
牛客网
牛客企业服务