发表于: 2018-01-04 21:45:26
1 544
今日完成
1.学习拦截器
(1)先上一波理论
Java中常见的AOP技术有两个,分别是Filter和代理模式(也可以称为过滤器和拦截器),Filter是基于回调函数(请看《Java回调机制解析》),代理模式是基于Java反射技术,代理模式又分为静态代理和动态代理,动态代理就是拦截器的简单实现。
(2)知道了拦截的原理是基于AOP的,然后就看怎么实现拦截器了。拦截器实现了handlerinterceptor 的方法
需要重写其中的三个方法,原理和aop很像,一个实在执行hangdler之前,一个实在modleandview之前,一个实在执行结束之后。可以用来统一收集异常日志,系统运行日志。
(3)这个有几个需要注意的地方
执行preHandle是顺序执行。
执行postHandle、afterCompletion是倒序执行
如果preHandle不放行,postHandle、afterCompletion都不执行。
只要有一个拦截器不放行,controller不能执行完成
(4)可以将需要认证的部分写在postHandle 的方法里面。(这里逻辑还没有理顺,所以这部分还没有写)
(5)再写登录请求的部分
在登陆时使用相应的加密算法。
2.完成加密工具的部署
(1)强随机数生成器的使用(用来生成盐值用于加密用户的密码)
*/
public class SaltGenerate {
public static String getSalt(){
Random ranGen = new SecureRandom();
byte[] aesKey = new byte[10];
ranGen.nextBytes(aesKey);
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < aesKey.length; i++) {
String hex = Integer.toHexString(0xff & aesKey[i]);
if (hex.length() == 1)
hexString.append('0');
hexString.append(hex);
}
String salt = hexString.toString();
return salt;
}
}
(2)再写一个SHA256的加密工具
public class MessageDigestUtils {
public static String SHA256(String message){
MessageDigest md = null;
String outStr = null;
try {
md = MessageDigest.getInstance("SHA-256");
byte[] digest = md.digest(message.getBytes());
outStr = byteToString(digest);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
return outStr;
}
private static String byteToString(byte[] digest) {
StringBuilder buf = new StringBuilder();
for (int i = 0; i < digest.length; i++) {
String tempStr = Integer.toHexString(digest[i] & 0xff);
if (tempStr.length() == 1) {
buf.append("0").append(tempStr);
} else {
buf.append(tempStr);
}
}
return buf.toString().toLowerCase();
}
}
测试了一下生成的随机数+密码(12345)在进行哈希加密算法得到的数据
(3)在登录的controller里面写生成cookie的方法,以及将相应的值放在cookie中。
(4)测试登录可以看到在浏览器中保存了cookie.使用aaa登录产生的cookie
明日计划
1.完成任务5的内容,在熟悉一下cookie和session的用法和原理。
遇到问题
1.没有理解到任务的逻辑。
收获
1.加密工具的使用
2.cookie的使用
评论