平时单体架构时直接存在seesion里,用的时候get一下就行了,非常方便。
但是如果服务器做了集群,session之间做不到共享,多台Tomcat:并不共享session存储空间,当请求切换到不同tomcat服务时导致数据丢失的问题
。使用StringRedisTemplate保存code,以及登录token.
public Result savePhone(String phone, HttpSession session) {
if (!PhoneUtil.isPhone(phone)) {
return Result.fail("手机号格式错误");
}
String code= RandomUtil.randomNumbers(4);
stringRedisTemplate.opsForValue().set(LOGIN_CODE_KEY+phone,code);
// session.setAttribute("code", code);
log.debug("手机验证码为..."+code);
return Result.ok();
}
String token = request.getHeader("authorization");
if (StrUtil.isBlank(token)) {
response.setStatus(401);
return false;
}
System.out.println(LOGIN_USER_KEY+token);
String user = stringRedisTemplate.opsForValue().get(LOGIN_USER_KEY+token);
if (user==null) {
response.setStatus(401);
return false;
}
UserDTO userDTO = JSONUtil.toBean(user, UserDTO.class);
UserHolder.saveUser(userDTO);
stringRedisTemplate.expire(LOGIN_USER_KEY+token,LOGIN_USER_TTL, TimeUnit.MINUTES);
return true;
反序列化不要用BeanUtil,会类型转换异常