发表于: 2016-12-04 00:01:58
1 1737
今天完成的事情:
1)昨天做到使用MD5加盐加密userID与userLogInTime,但这里问题来了,MD5加盐加密是单向的,也就是说不能解密的,而我的思路是通过解密token的值,来判断其中的登录时间有没有超时。如果单纯只是给登录时间加密后,存入数据库,每次有请求时从数据库拿MD5值比对验证,个人感觉没有意义,不如随机生成一串数字放在cookie里。
于是思路又转回了DES算法。但是昨天说了,DES算法需要传入字节数组进行加密解密,而utf-8下字符串跟字节数组的转换是存在数据改变的风险的。查了很久资料终于发现一个比较靠谱的方案,使用Apache下的common类包里,有个Base64类,其中可以对"字符串转成字节数组"、"字节数组转成字符串" 提供数据无损的转换方法
String re=Base64.encodeBase64String(byte[]); //字节数组转换为字符串
byte[] by=Base64.decodeBase64(string); //字符串转换为字节数组
加密解密中间的转换都用如上办法
不过在解密时,DES的解密方法会最终返回一个字节数组,这个字节数组不能使用Base64来转成字符串,而是使用new String(byte[])这个方法
至此,DES算法加密解密模块完成
2)在登录接口中,当用户名和密码验证通过后,增加有效期为20天的cookie
userID加上一串特殊标识符作为cookie的name,以便拦截器拦截时,可以分清这是验证登录用的token,还是别的不相关的cookie
DES工具类给当前系统long值加密,作为cookie的value
3)写springmvc配置下的拦截器
实现了HandlerInterceptor这个接口,org.springframework.web.servlet.HandlerInterceptor;
具体判断逻辑如下
4)因为任务五不是在任务四的项目上做的
所以今天最后将任务四的数据调取部分的代码重新写了一下,并重新设计了mysql,增加了一个列 "direction_name" (职业方向,比如“前端开发”)
明天计划的事情:
1)将任务四的代码重新写在任务五的项目上,并优化
2)修改Task4中的两个页面,一个设为用户不登录可以访问,一个设为用户必须登录才可以访问。要求用户必须登录才能访问的url统一增加前缀 /u/
遇到的问题:
1)本来想设计的复杂点,将userID+"特殊字符"加密,并作为cookie的name,然后在拦截器中判断时,解密这个name,再找有没有token的特殊字符。然而,报了如下的错
Cookie name "gOEaDQfU6tQ=" is a reserved token
可以看到"gOEaDQfU6tQ="应该是加密后的字符串,被拒绝了
这说明cookie的name命名是有规则的,这种带稀奇古怪符号的不行
查了下cookie的name命名规则:
在servlet中创建Cookie必须遵守RFC 2109规范。规范对于cookie name的原文描述如下:The name must conform to RFC 2109. That means it can contain only ASCII alphanumeric characters and cannot contain commas, semicolons, or white space or begin with a $ character. 大致中文含义就是name只能是ascii字符并且不能包含逗号,分号,空格,同时不能以$开头。这是cookie的标准,和你servlet的request/response用什么编码没有任何关系
2)重启jetty遇到如下报错:
[WARNING] FAILED SelectChannelConnector@0.0.0.0:10226: java.net.BindException: Address already in use: bind java.net.BindException: Address already in use: bind
10226端口被占用,任务管理器里关掉javax进程
小知识:
查看所有端口的情况:打开dos面板,输入netstat -ano
查看被占用端口对应的pid:netstat -aon|findstr "10226"
3)调试拦截器时出现报错:503 Service Unavailable
拦截器在springmvc里配置路径错误,拦截器初始化失败,请求没有通过拦截器
收获:
1)今天Java组分享会,了解了项目开发中,基于svn的trunk、branches、tags的版本升级、bug调试等,但是还不是很懂,只知道了个大概,做完任务五好好了解下
2)分享会上还提到了版本号的优化
3)跟莎莎了解了core层、service层、web层,也只是了解了大概
评论