发表于: 2017-06-21 00:11:23
2 1106
今日完成
1.DES加解密
写了一个DesUtil类,方法都是static的,Key也设置成了static的,这样,每次启动服务器的是乎key都会变化。 也就是说假设服务器在2:00重启,key改变了,那么1:59写的cookie就没办法解密了。
值得一说的是String经过DES加密后会返回一个byte[], 这个byte[]不能直接通过 new String(byte[])的方法转换成String。 因为这样做会乱码,导致将来解密时失败。我是看了一个修真师哥的日报提到这个问题。解决方法是把byte[]转换成一个String形式表达的 十六进制数,比如"ff4ec56a4532ff",解密时再把这个String表达的十六进制数转换成byte[]。
2.Cookie记录登陆时间
每次登陆都会写cookie,每次访问页面也写下cookie,这样更新了访问时间,相当于是一个touch的功能。
3.使用Spring的HandlerInterceptor拦截器
Spring的拦截器很好用,也很好设置基本步骤是先写拦截器继承HandlerInterceptorAdapter。 HandlerInterceptorAdapter和HandlerInterceptor的区别是,HandlerInterceptor是interface, 要实现三个方法。如果使用HandlerInterceptorAdapter(Abstract class)只需要Override需要使用的方法就好了。 写好拦截器之后在Spring中配置拦截器。
写拦截器的时候有几个小步骤
3.1 获得cookie.
HttpServletRequest.getCookies() 返回的是Cookie[]. 所以要loop一下,才能找到想要的cookie。不要忘记check一下返回值是不是null
3.2 解密Cookie
使用DesUtils解密 Cookie value. 要注意的一个坑是,如果服务器重启,DesUtils的解密key就变换了,就无法解密老cookie了。 这里需要try catch一下。如果发现错误了需要把老cookie删除。
3.3 获得访问的URI
我们要通过URI判断用户要访问什么页面,用户是否有权访问。那么需要拿到URI。HttpServletRequest提供了很周全的方法来获取用户请求信息
因为以"/u/"开头的URI是需要登陆才能访问的,我们只需要拿到URI然后比较开头三个char(substring)是不是"/u/"来做判断, 如果没有资格继续访问,可以通过return false来结束请求。
详细演示请看
http://www.enrollment.leihao.info/task5
明日计划:
可以开始Task6了。。。
评论