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