发表于: 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层,也只是了解了大概




返回列表 返回列表
评论

    分享到