发表于: 2017-01-27 23:56:24
1 1986
今天完成的事情:
完成了task5登录功能的添加,代码放在了代码链接中
1.了解了token的作用,用des算法生成了token,下面关于token的总结是copy过来的
传统身份验证的方法
HTTP 是一种没有状态的协议,也就是它并不知道是谁是访问应用。这里我们把用户看成是客户端,客户端使用用户名还有密码通过了身份验证,不过下回这个客户端再发送请求时候,还得再验证一下。
解决的方法就是,当用户请求登录的时候,如果没有问题,我们在服务端生成一条记录,这个记录里可以说明一下登录的用户是谁,然后把这条记录的 ID 号发送给客户端,客户端收到以后把这个 ID 号存储在 Cookie 里,下次这个用户再向服务端发送请求的时候,可以带着这个 Cookie ,这样服务端会验证一个这个 Cookie 里的信息,看看能不能在服务端这里找到对应的记录,如果可以,说明用户已经通过了身份验证,就把用户请求的数据返回给客户端。
上面说的就是 Session,我们需要在服务端存储为登录的用户生成的 Session ,这些 Session 可能会存储在内存,磁盘,或者数据库里。我们可能需要在服务端定期的去清理过期的 Session 。
ps:存储在cookie中的就是sessionid
基于 Token 的身份验证方法
使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:
- 客户端使用用户名跟密码请求登录
- 服务端收到请求,去验证用户名与密码
- 验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
- 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
- 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
- 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据
ps:根据task5的要求,我把token放在了cookie中
2.学习了spring mvc自定义拦截器创建和配置,http://blog.csdn.net/tonytfjing/article/details/39207551,设置拦截/u/*,重定向到login.html中,转发和重定向的区别:http://www.cnblogs.com/shenliang123/archive/2011/10/27/2226892.html,拦截条件就是判断token是否存在并且有效
演示地址放在了成果展示中,职业页面被拦截,可以使用用户名abc密码123登录
明天计划的事情:
下载JMeter,压测自己的JSP,查看TPS数据,调整并发数,压到程序挂掉为止。
遇到的问题:
1.用des算法生成token,加密后获取到的是byte类型的数组,先没有考虑好,直接是把byte类型的数组转换成了字符串,转换出来的是乱码,放在数据库中没有问题,但是存储在数据cookie时抛出异常,cookie内容类型异常,通过百度,把byte类型的数组转换成了16进制的long类型数字,创建了一个转换的工具类,对进制的转换不是很熟悉,直接拿过来的轮子
2.当把转发设置为重定向到login.html时,直接跳转为/u/login.html,所以改为了/login.html,但是放在线上时又出现了问题,线上项目没放到根目录,但是直接转发到了根目录/ login.html,这样就需要获取项目路径,方法是
httpServletRequest.getSession();
String contextpath = httpServletRequest.getScheme() +"://" + httpServletRequest.getServerName() + ":" +httpServletRequest.getServerPort() +httpServletRequest.getContextPath();
String uri=contextpath+"/login.html";
httpServletResponse.sendRedirect(uri);
收获:
了解了简单的权限认证
评论