发表于: 2017-01-26 23:55:36

1 1892


今天完成的事情:

使用DES对用户ID和登录时间加密,生成Token,放入Cookie中,拦截器里通过Cookie中判断Token的有效性来判断用户是否登录。

(1)学习了session和cookie的区别,拦截器与过滤器的区别

拦截器和过滤器

①拦截器是基于java的反射机制的,而过滤器是基于函数回调。

②拦截器不依赖与servlet容器,过滤器依赖与servlet容器。

③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。

④拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。

⑤在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。

⑥拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗

   考虑到安全应当使用session。

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能

   考虑到减轻服务器性能方面,应当使用COOKIE。

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

5、所以个人建议:

   将登陆信息等重要信息存放为SESSION

   其他信息如果需要保留,可以放在COOKIE中


(2)创建了DES加密解密类,但是对其中的算法了解甚微,有空再深入学习这方面的内容

package com.wanghao.jnshu.DesUtil;

import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;

public class Desutil {
public byte[] desCrypto(byte[] datasource, String password) {
try {
SecureRandom random = new SecureRandom();
      DESKeySpec desKey = new DESKeySpec(password.getBytes());
      // 创建一个密匙工厂,然后用它把DESKeySpec转换成
      SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
      SecretKey securekey = keyFactory.generateSecret(desKey);
      // Cipher对象实际完成加密操作
      Cipher cipher = Cipher.getInstance("DES");
      // 用密匙初始化Cipher对象
      cipher.init(Cipher.ENCRYPT_MODE, securekey, random);
      // 现在,获取数据并加密
      // 正式执行加密操作
      return cipher.doFinal(datasource);
  } catch (Throwable e) {
e.printStackTrace();
  }
return null;
   }

private byte[] decrypt(byte[] src, String password) throws Exception {
// DES算法要求有一个可信任的随机数源
  SecureRandom random = new SecureRandom();
  // 创建一个DESKeySpec对象
  DESKeySpec desKey = new DESKeySpec(password.getBytes());
  // 创建一个密匙工厂
  SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
  // DESKeySpec对象转换成SecretKey对象
  SecretKey securekey = keyFactory.generateSecret(desKey);
  // Cipher对象实际完成解密操作
  Cipher cipher = Cipher.getInstance("DES");
  // 用密匙初始化Cipher对象
  cipher.init(Cipher.DECRYPT_MODE, securekey, random);
  // 真正开始解密操作
  return cipher.doFinal(src);
   }

}

(3)使用拦截器进行了登录验证

这部分主要涉及自定义拦截器类的配置和使用,参考:http://www.cnblogs.com/Leo_wl/p/3779547.html

(4)实现了对密码的加密,明天再看加盐的内容,参考:https://www.dexcoder.com/selfly/article/4026

明天计划的事情: 

 1.把今天没完成的内容完成,今天学习拦截器的内容时,直接把用户名和密码放在了cookie中,明天改成记录token 

2.修改Task4中的两个页面,一个设为用户不登录可以访问,一个设为用户必须登录才可以访问。要求用户必须登录才能访问的url统一增加前缀 /u/。             
遇到的问题:   

        在自定义拦截器中,使用页面重定向时要先获得session,否则会出现异常

           
收获:

   学习了加密算法相关的内容和jsp中的基础内容



返回列表 返回列表
评论

    分享到