发表于: 2020-08-27 22:42:58

1 1358


/**
* 自定义拦截器
*/
public class MyInterceptor1 implements HandlerInterceptor {

@Autowired
   AccountService accountService;
   //日志
   private static Logger logger =LogManager.getLogger(MyInterceptor1.class);
   //进入 Handler方法之前执行
   //应用场景:用于身份认证(登录认证)、身份授权(权限校验)
   //此方法返回false表示拦截,不向下执行,返回true表示放行
   @Override
   public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 判断cookie中是否携带token,并进行验证
       Cookie[] cookies = request.getCookies();
       if (cookies != null) {
logger.info("Cookie长度为: " + cookies.length);
           logger.info("拦截器获取到的Cookie: " + String.valueOf(cookies));
           logger.info("开始遍历");
           // 遍历
           for (Cookie cookie : cookies) {
logger.info("当前cookie的值: " + cookie.getValue() + " 名字为:" + cookie.getName());
               // 判断是否有token
               if (cookie.getName().equals("token")) {
String tokenDES = cookie.getValue();
                   logger.info("tokenDES: " + tokenDES);

                   String token = DESUtils.getDecryptString(tokenDES);//解密
                   logger.info("token的解密value:" + token);

                   // 分割字符串 获取id
                   Long id = Long.valueOf(token.split("=")[0]);
                   logger.info("id: " + id);
                   //验证token有效性
                   if (accountService.select(new Account(id)) != null) {
return true;
                   } else {
logger.debug("token验证失败,跳回登陆页面");
                       // httpServletRequest https://blog.csdn.net/gris0509/article/details/6340987
                       response.sendRedirect(request.getContextPath() + "/login");
                       return false;
                   }
}
}
}
logger.debug("cookies不存在");
       response.sendRedirect(request.getContextPath() + "/login");
       return false;
   }

登录有点问题

 //登录
   @RequestMapping(value = "login")
public String login(Account account, Model model, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {

logger.info("加密前的信息:" + account);

       if (account.getUsername() != null && account.getPassword() != null) {
//将密码通过MD5进行加密
           String passwordMD5 = MD5Util.stringToMD5(account.getPassword());
           account.setPassword(passwordMD5);
           logger.info("加密后的信息:" + account);

           Account account1 = accountService.select(account);
           //验证账号密码是否正确
           if (account1 != null) {
logger.info("登录成功");
               Long id = account1.getId();//根据用户名获取id
               //使用系统当前时间生成唯一token,格式为键值对
               String token = id + "=" + System.currentTimeMillis();
               //使用DES加密
               String tokenDES = DESUtils.getEncryptString(token);
               logger.info("加密后的token" + tokenDES);
               //保存到cookies
               Cookie cookie = new Cookie("token", tokenDES);
               //设置cookie过期时间 单位为秒
               cookie.setMaxAge(3600);
               //设置cookie有效路径
               cookie.setPath("/");
               httpServletResponse.addCookie(cookie);
               return "redirect:/a/profession";
           } else {
model.addAttribute("error", "账号或密码错误");//如果账号密码错误则提示该消息
               return "login";
           }
} else {
model.addAttribute("error", "请先登录");//如果未登录就访问/u/profession则提示该消息
           return "login";
       }
Account account1 = accountService.select(account);

这里没看懂

今日问题暂无


返回列表 返回列表
评论

    分享到