登陆注册中,采用拦截器以后LoginTicket中userId始终为0的原因

 今天在登陆注册中加入了拦截器让全局共享User,可是在login甚至reg时候,出现的结果总是不尽人意
 经过调试发现,User中的id居然始终为0,name始终录入ID,经过几次调试发现是普遍情况。
 这里自己突然发现由于DAO层调试不到,赶紧去看里面的语句,果然出现了问题!
在这里插入图片描述
 这里的SELECT_FIELDS本来是“id”+INSERT_FIELDS,很明显,由于语句不全,录入也不全。仔细审查了一下发现里面有的语句还有加号。。。
 修正DAO层以后,再调试,user返回变得完整了,运行结束以后结果也正常了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
感谢您提供了更加详细的代码,根据您提供的代码,我再次检查了您的退出登录逻辑,发现其有以下问题: 1. 在退出登录时,您只是将Redis的ticket状态修改为1表示无效,但是并没有删除Cookie,这可能会导致在退出登录后,Cookie状态不正确,导致在用户再次访问页面时,又重新触发了登录验证逻辑,导致了重定向次数过多。建议您在退出登录时,不仅修改Redis的ticket状态,还要删除Cookie,修改代码如下: ``` @GetMapping("/logout") public String Logout(@CookieValue("ticket") String ticket, HttpServletResponse response) { System.out.println("ticket=" + ticket); userService.logout(ticket); SecurityContextHolder.clearContext(); CookieUtil.deleteCookie(response, "ticket"); // 删除Cookie return "redirect:/toLogin"; } ``` 2. 在拦截获取Cookie的方式不够严谨,您直接调用了`CookieUtil.getCookie(request, "ticket")`方法获取Cookie,但是如果Cookie不存在或者已经失效,该方法会返回null,这可能会导致在获取到null时,仍然继续执行登录验证逻辑,导致重定向次数过多。建议您修改为以下方式获取Cookie,并判断Cookie是否存在或者是否已经失效: ``` String ticket = null; Cookie[] cookies = request.getCookies(); if (cookies != null) { for (Cookie cookie : cookies) { if (cookie.getName().equals("ticket")) { ticket = cookie.getValue(); break; } } } ``` 希望以上建议对您有所帮助,如果您还有其他问题,请随时告诉我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值