zoukankan      html  css  js  c++  java
  • 使用token机制做登录鉴权(threadlocal+redis)

    登录流程:

    一:登录成功后:

    1,根据userId生成token,放入redis中 key为token,value为用户信息进行存储。

    2,response token到前端的cookie中

    3,threadlocal中存储user 信息

    二:拦截器:

    1,通过request获取前端的cookie,check token(有两个token ,token2根据token1生成)

    2,token不为空的话,去redis中拿token为key查询user信息,如果user为空,直接返回false.

    3,user不为空,刷新threadlocal中的user info,同时刷新redis中token : user的过期时间

    扩展思路:

    问:如果想实现一个账号如果被第二个人登录,第一个登录的会被顶掉,有思路吗:

    redis : userId -> token 

               token -> user

    我这样想的:登录succ->生成唯一token->redis存 userId:token ,token:user 。拦截器根据redis的token key 进行判断user是否为null;

                         如果第二个人登录此账户,同样的生成一个唯一token,根据userId查出redis中的所有token,然后遍历删除token:user。重新设置新的token:user

    其他方式:还是基于登录成功生成token的方式,请求接口时那token获取user信息,获取到就放行,只不过用户信息不放在threadlocal中,可以写一个通用方法,把session信息通过引用传递的方式到service方法中,不过这种方式不大优雅,可扩展性较差。以上两种获取session的方式都比从每个方法的request中直接获取强的多得多。 

  • 相关阅读:
    解决Android SDK Manager更新、下载速度慢
    selenium报错以及各解决方法
    webdriver对各种浏览器的支持
    selenium driver版本和Chrome浏览器版本对应关系
    selenium web driver
    js中变量注意事项
    js选项卡实现
    两种JS方法实现斐波那契数列
    三种JS方法确定元素在数组中的索引值
    javascript内置属性——arguments
  • 原文地址:https://www.cnblogs.com/enchaolee/p/11671543.html
Copyright © 2011-2022 走看看