为什么可以动态的获取到用户的姓名和其他信息呢?InheritableThreadLocal的妙用

  1. 首先定义一个UserInfoUtils类,写出相应的get set remove方法
  2. 声明新建一个InheritableThreadLocal对象
  3. 该对象可以实现 整个项目里面都动态的知道是哪一个用户
  4. 对于账户这一类信息,一般都是保存在缓存里,减少对数据库的查询操作,否则系统运行中,一直要反复查询数据库,损耗了性能。
  5. 用户的每一次请求,都会携带session,来判断是否合理。

public class UserInfoUtils {

    private static InheritableThreadLocal<User> tokenPool = new InheritableThreadLocal<User>();

    public static User get() {
        return tokenPool.get();
    }

    public static void set(User user) {
        tokenPool.set(user);
    }

    public static void remove() {
        if (get() != null) {
            tokenPool.remove();
        }
    }
}

@Override
    public String login(String loginName, String password) {
        User user = userDao.findByLoginName(loginName);
        if (user == null) {
            logger.error("不存在该用户!loginName:{},password");
            return null;
        } else {
            //数据库存放的密码是普通MD5加密
            String userPassword = userDao.getPasswordByName(user.getLoginName());
            if (MD5Utils.getSaltverifyMD5(password, userPassword)) {
                String token = TokenUtils.genetateToken().trim();
                //redis中存放user key token, value userInfo
                redisTemplate.opsForValue().set(token, user, 1800, TimeUnit.SECONDS);
                UserInfoUtils.set(user);
                //用户登录成功之后,将用户对应的权限保存在redis里
                listUserRight();
                return token;
            }
            return null;
        }
    }

在这里插入图片描述

相关链接https://mp.weixin.qq.com/s/c0eNbNXJAR7CMRBfotf4kw

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值