发表于: 2017-12-15 21:22:24

1 626


今天完成的事情:

今天把自己想做的做出来了。

做了一个工具类专门用来加密解密。集成了字符串的转换和DES。

然后集成了2位师兄的方法做出来了自己的验证方法。本来想验证两条token可是发现那样的效果并不好,反而增加了代码的量。于是结合了两位师兄的方法。顺便在注册过程中加入了对用户名的唯一性的判断。

//用户名唯一性判断  这样是遍历出数据库里面所有的name  效率并不高 还需要加强

List<User> list  = userService.nameList();

   System.out.println(list);
   //前台表单如果不输入数据,直接提交,值是"",而不是NULL
   if(name==null||name.trim().equals("")){
logger.info("姓名不能为空");
       return null;
   }else if(password==null||password.trim().equals("") ) {
logger.info("密码不能为空");
       return null;
   }else if(1==1){
for (User user:list) {
if(name.equals(user.getName())){
System.out.println("name不能一样");
               break;
           }
       }
   } else {
password = MD5UtilAndSalt.getMD5(password);
       logger.info("加密后的密码为:"+password);
       userService.addUser(name, password);
       return "web";
   }
return null;

//这是一个把16进制转为字符编码,然后通过对字符解密,然后把解密后的字符编码转为字符串。

public static String decrypt(String token)throws  Exception{

         byte[] bytes  = Transform.hexStringToByteArray(token);//16进制字符串转为加密后字符编码
   byte[] deByte = DESUtil.decrypt(bytes,"12345678");//把字符编码进行解密
   String userInfo = new String(deByte);//把解密后的字符编码转化为字符串
   System.out.println("输出解密后的字符串----->"+userInfo);
   String userID="";
   for(int i= 0;i<userInfo.length();i++){
char x = userInfo.charAt(i);
       if(x=='='){
break;
       }
userID+=x;
   }
System.out.println("userID--->"+userID);//输出一下用户ID
   return userID;

}

Transfrom

//16进制字符串转化为字节数组
public static byte[] hexStringToByteArray(String str){
int len = str.length();
   byte[] b = new byte[len/2];
   for(int i = 0;i<len;i+=2 ){
b[i/2] = (byte) ((Character.digit(str.charAt(i), 16) << 4) + Character
               .digit(str.charAt(i + 1), 16));
   }
return b;
}


DES解密:

public static 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);
}


加密过程不贴了。也是一些简单的东西。重要的是实现这些方法的思想。还有一些对时间格式的处理。

从前台获取时间后:

//把时间转化为对应的时间戳

public String forAdd(String name, Long QQ, String studyType, Date schoolTime){

Calendar calendar = Calendar.getInstance();
   calendar.setTime(schoolTime);
   Long newSchoolTime = calendar.getTimeInMillis();
   System.out.println("newSchoolTime:"+newSchoolTime);
   studentService.forAdd(name,QQ,studyType,newSchoolTime);
   return "redirect:list";
}

通过DateTag把对应的时间戳转化为date类型 然后传到前端页面显示:

public int doStartTag() throws JspException {
String vv =" "+value;
   long time =Long.valueOf(vv.trim());
   Calendar c =Calendar.getInstance();
   c.setTimeInMillis(time);
   SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
   String s =simpleDateFormat.format(c.getTime());
   try {
pageContext.getOut().write(s);
   }catch (Exception e){
e.printStackTrace();
   }
return super.doStartTag();

}


前端显示:

<%@ taglib prefix="date" uri="/tags" %>
<td><date:date value="${s.schoolTime}"/></td>

这里运用了任务四里面的时间Tag的概念。可以看一下页面效果吧

然后看一下数据库里面的

嗯,目前想实现的都能基本实现了,接下来的时间,把前面的任务1-5的东西整合一下。

明天计划的事情:

整合任务一至任务五。
遇到的问题:

没有太多问题,主要还是在一些方法上面的运用不够灵活,基础不牢靠的原因。
收获:

学会了对前端数据更改,然后加入数据库等的操作。


返回列表 返回列表
评论

    分享到