当前位置: 首页 > news >正文

站长统计app进入网址新版装饰装修工程

站长统计app进入网址新版,装饰装修工程,辽宁省建设厅安全员考试官方网站,西安大型网站建设公司使用Redis存储验证码 验证码需要频繁访问和封信,对性能要求高;验证码不需要永久保存,通常在很短时间内失效;分布式部署,存在Session共享问题; 使用Redis存储登陆凭证 处理每次请求时,都要查询用…
  • 使用Redis存储验证码
    • 验证码需要频繁访问和封信,对性能要求高;
    • 验证码不需要永久保存,通常在很短时间内失效;
    • 分布式部署,存在Session共享问题;
  • 使用Redis存储登陆凭证
    • 处理每次请求时,都要查询用户登陆凭证,访问频率非常高;
  • 使用Redis缓存用户信息
    • 处理每次请求时,都要根据凭证查询用户信息,访问频率非常高。
      • 查询缓存中是否有user;
      • 如果没有就初始化缓存;
      • 如果user的信息更新,将清除缓存;

1. 使用Redis存储验证码

  • 在生成验证码的逻辑中,owner由UUID生成,并交给Cookie;然后将验证码text存到kaptcha:owner键中,并设置有效时间为60秒
@RequestMapping(path="/kaptcha", method = RequestMethod.GET)public void getKaptcha(HttpServletResponse response, HttpSession session){// 生成验证码String text = kaptchaProducer.createText();BufferedImage image = kaptchaProducer.createImage(text);// 将验证码存入session// session.setAttribute("kaptcha", text);// 优化:存到redis里// 验证码的归属ownerString kaptchaOwner = CommunityUtil.generateUUID();Cookie cookie = new Cookie("kaptchaOwner",kaptchaOwner);cookie.setMaxAge(60);cookie.setPath(context_path);response.addCookie(cookie);String redisKey = RedisKeyUtil.getKaptchaKey(kaptchaOwner);redisTemplate.opsForValue().set(redisKey, text, 60, TimeUnit.SECONDS);// 将图片输出给浏览器response.setContentType("image/png");try{OutputStream os = response.getOutputStream();ImageIO.write(image, "png", os);} catch (IOException e) {logger.error("响应验证码失败:"+e.getMessage());}}
  • 在登陆功能中,键从cookie中去哪出,然后从redis中获取kaptcha:kaptchaOwner键对应的值(验证码),判断验证码是否正确;
@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中取并检查验证码 --> 优化:从Redis中取// String kaptcha = (String) session.getAttribute("kaptcha");String kaptcha = null;if(StringUtils.isNotBlank(kaptchaOwner)){String redisKey = RedisKeyUtil.getKaptchaKey(kaptchaOwner);kaptcha = (String) redisTemplate.opsForValue().get(redisKey);}if(StringUtils.isBlank(kaptcha) || StringUtils.isBlank(code) || !kaptcha.equals(code)){model.addAttribute("codeMsg","验证码不正确");return "/site/login";}........................

2. 使用Redis存储登陆凭证

各个逻辑验证通过后,将生成一个用户凭证(UUID生成),存到Redis中,并设置生存周期。在后续需要验证登陆逻辑时,从Redis中get即可。

 public Map<String,Object> login(String username, String password, int expiredSeconds){Map<String,Object> map = new HashMap<>();// 空值判断........// 账号密码都不为空,验证合法性// 验证账号合法性..........// 验证密码........// 生成登陆凭证LoginTicket loginTicket = new LoginTicket();loginTicket.setUserId(user.getId());loginTicket.setTicket(CommunityUtil.generateUUID());loginTicket.setStatus(0);loginTicket.setExpired(new Date(System.currentTimeMillis() + 1000 * 60 * 10));loginTicketMapper.insertLoginTicket(loginTicket);String redisKey = RedisKeyUtil.getTicketKey(loginTicket.getTicket());redisTemplate.opsForValue().set(redisKey,loginTicket);map.put("ticket", loginTicket.getTicket());return map;}

3. 使用Redis缓存用户信息

// 1. 优先从缓存中取值public User getCache(int userId){String redisKey = RedisKeyUtil.getUserKey(userId);return (User) redisTemplate.opsForValue().get(redisKey);}// 2. 如果取不到就初始化缓存public 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. 数据变更时清除缓存数据public void clearCache(int userId){String redisKey = RedisKeyUtil.getUserKey(userId);redisTemplate.delete(redisKey);}
  • 当获取user的时候,例如根据userId获取用户信息,先判断缓存中查有没有user:userId这个键。如果有,就从缓存中返回User;如果没有,就初始化缓存,将User信息写入user:userId。
  • 每次用户信息修改后,例如更改密码后、退出登录修改ticket后、修改用户激活状态后等,多需要做一次clearCache。
http://www.sczhlp.com/news/140601/

相关文章:

  • 做网站必须学php吗seo外包公司兴田德润官方地址
  • 如何seo网站挣钱官方建网站哪个好
  • 可以建公司网站网站查询ip地址
  • 9月26号
  • iis 网站压缩郑州信息网首页
  • 建筑设计师专业网站注册城乡规划师报考专业一览表
  • 网站与微信对接计算机软件开发培训班
  • 怎样把网站做的更吸引做网站公司做网站公司
  • 安阳市建设工程领域网站wordpress无限绑域名
  • 西安做网站企业搭建平台筑巢引凤
  • asp网站 证书网络营销网站 优帮云
  • 网站跟系统的区别是网站内链是什么 怎么做
  • 天津网站建设价位wordpress自动采集更新
  • 网站seo知识新媒体平台
  • 东莞网站建设乐云seo成都定制网站建
  • 做暖暖视频网站有哪些优化设计五年级下册语文答案2021
  • 服装网站推广计划书范文500字汕头模版网站建设
  • 个人网站制作论文建设局网站首页
  • 百度做的网站 如果不做推广了 网站还保留吗网站建设需要的职位
  • 美丽说网站模板海外平台推广
  • wordpress无法连接ftf服务器济南官网seo推广
  • 用什么工具做网站网站优化的作用
  • 做网站的课题背景介绍口碑好网站建设
  • 做医疗类网站有什么需要审核的百度搜索优化关键词排名
  • 做靓号网站做辅食网站
  • 网站建设的域名是什么鲜花网站建设项目概述
  • 网站搜索要怎么做邯郸信息港房屋出租
  • 专业柳州网站建设价格wordpress加skype
  • 怎么建设个人网站教程五合一网站制作视频教程?
  • 广东seo网站设计多少钱王也踏青图