redistoken的信息获取问题
1、我注意到老师代码里redistoken的部分如下,使用前缀+userId作为key,token(也就是UUID)作为值传输给前端。可是token的作用应该是用来拿到userId的吧,既然userId作为key了,而Redis中又没有按value查找key的接口,那么我们只有token的情况下,要怎么在服务端获取到用户信息或者userId呢?
2、还有一个问题就是后面老师在做JWT的时候,将数据库中的User对象查出来以后,没有做任何处理直接放入jwt了,可是jwt的payload是不安全的,用户随时可以解密出来,而这一部分信息里面包含了密码和盐,这是不是不太安全?
@PostMapping("login")
public GraceJSONResult login(@Valid @RequestBody RegistLoginBO registLoginBO,
HttpServletRequest request) throws Exception {
String mobile = registLoginBO.getMobile();
String code = registLoginBO.getSmsCode();
// 1. 从redis中获得验证码进行校验判断是否匹配
String redisCode = redis.get(MOBILE_SMSCODE + ":" + mobile);
if (StringUtils.isBlank(redisCode) || !redisCode.equalsIgnoreCase(code)) {
return GraceJSONResult.errorCustom(ResponseStatusEnum.SMS_CODE_ERROR);
}
// 2. 根据mobile查询数据库,判断用户是否存在
Users user = usersService.queryMobileIsExist(mobile);
if (user == null) {
// 2.1 如果查询的用户为空,则表示没有注册过,则需要注册信息入库
user = usersService.createUsers(mobile);
}
//3. 保存用户token,分布式会话到redis中
String uToken = TOKEN_USER_PREFIX + SYMBOL_DOT + UUID.randomUUID().toString();
redis.set(REDIS_USER_TOKEN + ":" + user.getId(), uToken);
// 4. 用户登录注册以后,删除redis中的短信验证码
redis.del(MOBILE_SMSCODE + ":" + mobile);
// 5. 返回用户的信息给前端
UsersVO usersVO = new UsersVO();
BeanUtils.copyProperties(user, usersVO);
usersVO.setUserToken(uToken);
return GraceJSONResult.ok(usersVO);
}
21
收起
正在回答
1回答
这里是没有存的,以前别的实战是存的用户信息。
你可以存一下的。
这边我的设计是这样的: 因为用户端是手机端,他的本地缓存要强于浏览器,所以用户一部分数据直接缓存在手机上的。如果要最新用户数据则可以后端查询一下。
另外浏览器的运营平台和企业后台是通过jwt中放的用户信息,也是可以拿到的。
另外用户会话不是一定要存用户信息,他不像httpsession那样的,存一个加密的或者随机的字符窜其实都可以的~~哈哈哈哈
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星