发表于: 2017-12-14 21:37:24

1 715


今天完成的事情:

继续搞登录验证。

自己把ID和登录时间一起加密,可是在完成加密后,在验证cookie时不知道如何解密,以及把cookie中的东西提取出来。于是去看了之前师兄们的东西,发现大师兄的是只验证了cookie的名称,如果名称正确那就可以实现登录,没有验证cookie中真正携带的ID以及别的东西。

for (int i = 0; i < cookies.length; i++) {
System.out.println("进入for循环");
   if (cookies[i].getName().equals("loginInfo")) {
System.out.println("haha");
       return true;
   }
}

这样的确可以实现对访问的拦截,可是治标不治本。没有用到cookie的真正的精髓,于是又去看了一些师兄的东西,有一种是通过把ID和登录时间连做字符串后,然后加密存入cookie中后,在对cookie解密时,把cookie的东西遍历出来,获取登录时的ID,然后把ID到数据库中去查询对应的数据,如果能够查询到就返回true。这个方法,可以实现。

不过自己在使用时,始终解密出来的ID为0,这就很尴尬。也贴一下大致的思路上的代码。

for(int i = 0; i < cookies.length; i++) {
if (cookies[i].getName().equals("loginInfo")) {
String token = cookies[i].getValue();
       //解密过程与加密过程相反,先把byte类型数组转化为十六进制字符串,然后执行DES的解密过程得到tokenInfo
       System.out.println("开始解密");
       byte[] s = Transform.hexString2binaryString(token);
       byte[] tokenInfo = DESUtil.decrypt(s, "12345678");
       System.out.println(tokenInfo);
       String newToken  = new String(tokenInfo);
       System.out.println("newToken");
       for(int j = 0;j<tokenInfo.length;j++){
char c =newToken.charAt(j);
           System.out.println(c);
           String id="";
           id+=c;
           if(c =='='){
break;
           }
System.out.println("id="+id);
           //通过获取的ID去数据库查询对应的对象,如果不为空,则返回对应的界面。
           if(userService.findByID(Integer.parseInt(id))!=null){
return true;
           }
}

}
}

我自己的思路是,同时生成name,以及登陆时间两个cookie,然后去验证这两个cookie,如果两个cookie都符合条件,那么就可以验证成功,然后允许访问。这也是一种方法吧。自己的方法还没有怼出来。明天继续怼。

明天计划的事情:

把自己思路上的东西做出来。

遇到的问题:

主要还是一开始不懂拦截器的运作机制。如果为true则允许通过,以及在拦截器里面是如何来判断cookie的有效性的。
收获:

对拦截器的理解又加深了一些,只是在具体的方法上还不熟练,慢慢来。


返回列表 返回列表
评论

    分享到