发表于: 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 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:

  1. 客户端使用用户名跟密码请求登录
  2. 服务端收到请求,去验证用户名与密码
  3. 验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
  4. 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
  5. 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
  6. 服务端收到请求,然后去验证客户端请求里面带着的 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);

      
收获: 

了解了简单的权限认证                    


返回列表 返回列表
评论

    分享到