发表于: 2020-08-29 22:12:55

1 1351


试错了很多工具类 师兄们的代码 好多有问题。。

拦截器写完

Cookie[] cookies = httpServletRequest.getCookies();

//如果cookies的长度等于0,表示没有cookies,返回登录页面,让用户登录一下下,发给用户一个cookie,下次光临的时候用户就有cookie
if (cookies.length == 0) {
logger.info("没有cookie");

   try {
//如果没有token  就从header里取token
       String token = httpServletRequest.getHeader("token");

       logger.info("header里取出的token" + token);

       //destoken进行解密
       String firstDecrypt = des.decrypt(token);
       logger.info("token进行第一次解密的结果" + firstDecrypt);

       //token解密后的结果根据|进行拆分
       String[] mingwen = firstDecrypt.split("//|");
       logger.info("token解密后的结果根据|进行拆分");

       //token根据 | 拆分出的第一个(用户id
       String TokenId = mingwen[0];
       logger.info("token中解密出第一个是id" + TokenId);
       long id = des.decryptToLong(TokenId);
       logger.info("id解密并转换成long类型" + id);

       //long类型转化为int类型
       int AId = (int) id;

       //根据id查询数据库中有无此用户
       Account accountA = accountService.findById(AId);

       //如果用户为空,返回登录界面
       if (accountA == null) {
logger.info("没有此token内所含Id的用户,必须去登录");
           httpServletResponse.sendRedirect("/tologin");
           return false;
       }

//token根据 | 拆分出的第二个(用户名称)  这个不需要验证
       String TokenName = mingwen[1];
       logger.info("token中解密出第二个是名字" + TokenName);

       //token根据 | 拆分出的第三个(用户登陆时间)
       String TokenTime = mingwen[2];
       logger.info("token中解密出第三个是登陆时间" + TokenTime);
       long time = des.decryptToLong(TokenTime);
       logger.info("把时间解密并转换成long类型" + time);

       //把当前时间(long)减去登陆时间(long)  如果>=30分钟   意味着时间已经超过了  返回登录页面
       if (System.currentTimeMillis() - time >= 30 * 60 * 1000) {
System.out.println("token过期=====");
           //返回登录页面
           httpServletResponse.sendRedirect("/tologin");
           return false;
       }
logger.info("tokenid,有效期)验证通过,登录成功");
       return true;

   } catch (Exception e) {
httpServletResponse.sendRedirect("/tologin");
       return false;
   }

} else {

//     用户有cookies
   logger.info("cookie");
   //遍历一下用户的cookies,放入cookie,看看他的cookie是什么呀

   try {

String Mytoken = null;

       for (Cookie cookie : cookies) {
//如果他的cookie与我发给他的cookie相等,就可以直接返到页面里
           if (cookie.getName().equals("token")) {
Mytoken = cookie.getValue();
               break;
           }
}
logger.info("cookie取出的token :" + Mytoken);

       //destoken进行解密
       String MingwenA = des.decrypt(Mytoken);
       logger.info("token进行第一次解密的结果" + MingwenA);

       //token解密后的结果根据|进行拆分
       String[] mingwenB = MingwenA.split("\\|");
       logger.info("token解密后的结果根据|进行拆分后的结果" + mingwenB);

       //token根据 | 拆分出的第一个(用户id
       String TokenId = mingwenB[0];
       logger.info("token中解密出第一个是id" + TokenId);
       long id = des.decryptToLong(TokenId);
       logger.info("id解密并转换成long类型" + id);

       //long类型转化为int类型
       int BId = (int) id;

       //根据id查询数据库中有无此用户
       Account accountB = accountService.findById(BId);

       //如果用户为空,返回登录界面
       if (accountB == null) {
logger.info("没有此token内所含Id的用户,必须去登录");
           httpServletResponse.sendRedirect("/tologin");
           return false;
       }

//token根据 | 拆分出的第二个(用户名称)
       String TokenName = mingwenB[1];
       logger.info("token中解密出第二个是名字" + TokenName);

       //token根据 | 拆分出的第三个(用户登陆时间)
       String TokenTime = mingwenB[2];
       logger.info("token中解密出第三个是登陆时间" + TokenTime);
       long time = des.decryptToLong(TokenTime);
       logger.info("把时间解密并转换成long类型" + time);


       //把当前时间(long)减去登陆时间(long)  如果>=30分钟   意味着时间已经超过了  返回登录页面
       if (System.currentTimeMillis() - time >= 30 * 60 * 1000) {
System.out.println(time);
           System.out.println(System.currentTimeMillis());
           System.out.println("token过期=====");
           //返回登录页面
           httpServletResponse.sendRedirect("/tologin");
           return false;
       }

logger.info("tokenid,有效期)验证通过,登录成功");
       return true;
   } catch (Exception e) {

httpServletResponse.sendRedirect("/tologin");
       return false;
   }

上传服务器 测试没有问题

明日计划 深度思考整理 任务6测试

今日问题暂无


返回列表 返回列表
评论

    分享到