4.7优化登录模块
作者:互联网
重构验证码
设置验证码的redisKey
//登录验证码
public static String getKaptchaKey(String owner){
return PREFIX_KAPTCHA + SPLIT + owner;
}
重构获取验证码的方法
//重构
//验证码的归属
String kaptchaOwner = CommunityUtil.generateUUID();
Cookie cookie = new Cookie("kaptchaOwner",kaptchaOwner);
cookie.setMaxAge(60);
cookie.setPath(contextPath);
response.addCookie(cookie);
//将验证码存入redis
String redisKey = RedisKeyUtil.getKaptchaKey(kaptchaOwner);
redisTemplate.opsForValue().set(redisKey,text,60, TimeUnit.SECONDS);
在用到验证码的地方修改获得验证码的途径(这回通过redis获取)
@RequestMapping(path = "/login",method = RequestMethod.POST)
public String login(String username,String password,
String code,boolean rememberme,Model model/*,
HttpSession session*/,HttpServletResponse response,
@CookieValue("kaptchaOwner") String kaptchaOwner){
//判断验证码,从session中取
// String kapthca = (String)session.getAttribute("kaptcha");
//重构
String kapthca = null;
if (StringUtils.isNotBlank(kaptchaOwner)){
String redisKey = RedisKeyUtil.getKaptchaKey(kaptchaOwner);
kapthca = (String)redisTemplate.opsForValue().get(redisKey);
}
重构存储登录凭证
设置登录的redisKey
//登录的凭证
public static String getTicketKey(String ticket){
return PREFIX_TICKET + SPLIT + ticket;
}
在用到登录凭证的地方修改获取途径
public LoginTicket findLoginTicket(String ticket){
// return loginTicketMapper.selectByTicket(ticket);
String redisKey = RedisKeyUtil.getTicketKey(ticket);
return (LoginTicket) redisTemplate.opsForValue().get(redisKey);
}
public Map<String,Object> updatePassword(String ticket,String newPassword,String oldPassword){
//通过ticket得到当前用户
String redisKey = RedisKeyUtil.getTicketKey(ticket);
LoginTicket loginTicket = (LoginTicket) redisTemplate.opsForValue().get(redisKey);
User user = userMapper.selectById(loginTicket.getUserId());
用redis缓存用户信息
设置用户的redisKey
// 用户
public static String getUserKey(int userId){
return PREFIX_USER+ SPLIT +userId;
}
三个用于处理用户缓存的方法
//1.优先从缓存中取值
private User getCache(int userId){
String redisKey = RedisKeyUtil.getUserKey(userId);
return (User) redisTemplate.opsForValue().get(redisKey);
}
//2.取不到的时候就初始化缓存数据
private User initCache(int userId){
User user = userMapper.selectById(userId);
String redisKey = RedisKeyUtil.getUserKey(userId);
redisTemplate.opsForValue().set(redisKey,user,3600, TimeUnit.SECONDS);
return user;
}
//3.当数据变化时,要清除缓存数据
private void clearCache(int userId){
String redisKey = RedisKeyUtil.getUserKey(userId);
redisTemplate.delete(redisKey);
}
在需要清除缓存的地方调用上述三个方法
public User findUserById(int userId){
// return userMapper.selectById(userId);
User user = getCache(userId);
if (user == null){
user = initCache(userId);
}
return user;
}
public int updateHeader(int userId,String headerUrl){
int rows = userMapper.updateHeader(userId, headerUrl);
clearCache(userId);
return rows;
}
标签:4.7,return,String,登录,userId,验证码,redisKey,模块,ticket 来源: https://blog.csdn.net/weixin_44114392/article/details/112578056