发表于: 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了。。。



返回列表 返回列表
评论

    分享到