发表于: 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的有效性的。
收获:
对拦截器的理解又加深了一些,只是在具体的方法上还不熟练,慢慢来。
评论