亚游,  从1994年到1997年这三年的时间里,刘洪经过反复的实践,对的操作运作以及渠道资源的把握已经达到了相当高的地步,积累了相当可贵的。对于联想外设事业来讲,凭借自己在技术、、渠道等方面的优势,在经过与国外厂商的长时间反复的对话之后,其激光打印机的于1997年开始,稳居国内第二位,在2001年占有率达到了15%以上。对于刘洪个人来讲,刘洪彻底完成了自己作为营销人员的成熟,这样的成熟,让刘洪具备了双重的身份——成熟的技术开发人员成熟的营销人员,而这两种身份的融合则是让刘洪的发展有了更为宽广的前景。

【环球网综合报道】据英国《每日邮报》11月2日报道,近日,一段记录英国康沃尔郡的建筑工人亚当•汤姆金(Adam Tomkin)推着电锯跑过院子的视频在网络上引起了人们的关注。三缺一棋牌游戏平台  松下BiBi·EX系列电动自行车搭载20Ah锂电池,比早期型号相比可以达到更远距离的续航,普通模式下可连续行进110km,提升约26%。如果以全速模式行进,在这种模式下电量消耗会较大,可达到68km的续航。假设1天使用频率大约是3km,充电频率只需4周1次。

发布于 2018-03-24 06:56:48 | 171 次阅读 | 评论: 0 | 来源: 网友投递

这里有新鲜出炉的Redis教程,程序狗速度看过来!

Redis Key-Value数据库

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。


本章简单介绍redis的配置及使用方法,本文示例代码在前面代码的基础上进行修改添加,实现了使用redis进行缓存验证码,以及校验验证码的过程。感兴趣的的朋友一起看看吧

本章简单介绍redis的配置及使用方法,本文示例代码在前面代码的基础上进行修改添加,实现了使用redis进行缓存验证码,以及校验验证码的过程。

1、添加依赖库(添加redis库,以及第三方的验证码库)


       <dependency> 
  <groupId>org.springframework.boot</groupId> 
  <artifactId>spring-boot-starter-redis</artifactId> 
</dependency> 
<dependency> 
  <groupId>cn.apiclub.tool</groupId> 
  <artifactId>simplecaptcha</artifactId> 
  <version>1.2.2</version> 
</dependency> 

2、在application.properties中添加redis的配置信息


spring.redis.database=4 
spring.redis.host=hostname 
spring.redis.password=password 
spring.redis.port=6379 
spring.redis.timeout=2000 
spring.redis.pool.max-idle=8 
spring.redis.pool.min-idle=0 
spring.redis.pool.max-active=8 
spring.redis.pool.max-wait=-1 

3、添加redis数据模版

新增RedisConfig.Java


package com.xiaofangtech.sun.config; 
import org.springframework.context.annotation.Bean; 
import org.springframework.data.redis.connection.RedisConnectionFactory; 
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; 
import org.springframework.data.redis.core.RedisTemplate; 
import org.springframework.data.redis.serializer.StringRedisSerializer; 
public class RedisConfig { 
  @Bean 
  JedisConnectionFactory jedisConnectionFactory() { 
    return new JedisConnectionFactory(); 
  } 
  @Bean RedisTemplate<String, String>redisTemplate(RedisConnectionFactory factory) 
  { 
    RedisTemplate<String, String> template = new RedisTemplate<String, String>(); 
    template.setConnectionFactory(jedisConnectionFactory()); 
    template.setKeySerializer(new StringRedisSerializer()); 
    template.setValueSerializer(new StringRedisSerializer()); 
    return template; 
  } 
} 

4、redis的基本使用(缓存生成的验证码信息)

新建CaptchaModule.java,涉及redis插入操作关键代码


@Autowired 
  private RedisTemplate<String, String> redisTemplate; 
/将验证码以<key,value>形式缓存到redis 
    redisTemplate.opsForValue().set(uuid, captcha.getAnswer(), captchaExpires, TimeUnit.SECONDS); 

完整代码


package com.xiaofangtech.sunt.utils; 
import java.io.ByteArrayOutputStream; 
import java.io.IOException; 
import java.util.UUID; 
import java.util.concurrent.TimeUnit; 
import javax.imageio.ImageIO; 
import javax.servlet.http.Cookie; 
import javax.servlet.http.HttpServletResponse; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.data.redis.core.RedisTemplate; 
import org.springframework.http.MediaType; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.ResponseBody; 
import org.springframework.web.bind.annotation.RestController; 
import cn.apiclub.captcha.Captcha; 
import cn.apiclub.captcha.backgrounds.GradiatedBackgroundProducer; 
import cn.apiclub.captcha.gimpy.FishEyeGimpyRenderer; 
@RestController 
@RequestMapping("captcha") 
public class CaptchaModule { 
  @Autowired 
  private RedisTemplate<String, String> redisTemplate; 
  private static int captchaExpires = 3*60; /超时时间3min 
  private static int captchaW = 200; 
  private static int captchaH = 60; 
  @RequestMapping(value = "getcaptcha", method = RequestMethod.GET, produces = MediaType.IMAGE_PNG_VALUE) 
  public @ResponseBody byte[] getCaptcha(HttpServletResponse response) 
  { 
    /生成验证码 
    String uuid = UUID.randomUUID().toString(); 
    Captcha captcha = new Captcha.Builder(captchaW, captchaH) 
        .addText().addBackground(new GradiatedBackgroundProducer()) 
        .gimp(new FishEyeGimpyRenderer()) 
        .build(); 
    /将验证码以<key,value>形式缓存到redis 
    redisTemplate.opsForValue().set(uuid, captcha.getAnswer(), captchaExpires, TimeUnit.SECONDS); 
    /将验证码key,及验证码的图片返回 
    Cookie cookie = new Cookie("CaptchaCode",uuid); 
    response.addCookie(cookie); 
    ByteArrayOutputStream bao = new ByteArrayOutputStream(); 
    try { 
      ImageIO.write(captcha.getImage(), "png", bao); 
      return bao.toByteArray(); 
    } catch (IOException e) { 
      return null; 
    } 
  } 
} 

5、redis内容的获取(根据key获取验证码)

完善前面获取token的流程,在获取token的接口中添加校验验证码的流程(根据登录参数中的验证码id获取验证码内容,并与登录参数中的验证码内容进行比对)

修改JsonWebToken.java


@Autowired 
  private RedisTemplate<String, String> redisTemplate; 
/验证码校验在后面章节添加 
String captchaCode = loginPara.getCaptchaCode(); 
try { 
  if (captchaCode == null) 
  { 
    throw new Exception(); 
  } 
  String captchaValue = redisTemplate.opsForValue().get(captchaCode); 
  if (captchaValue == null) 
  { 
    throw new Exception(); 
  } 
  redisTemplate.delete(captchaCode); 
  if (captchaValue.compareTo(loginPara.getCaptchaValue()) != 0) 
  { 
    throw new Exception(); 
  } 
} catch (Exception e) { 
  resultMsg = new ResultMsg(ResultStatusCode.INVALID_CAPTCHA.getErrcode(),  
      ResultStatusCode.INVALID_CAPTCHA.getErrmsg(), null); 
  return resultMsg; 
} 

6、测试

1)请求获取验证码,可以获取到验证码图片,以及在cookie中返回缓存入redis的key值

2)查看redis,可以查看到之前缓存的key value

3)登录获取token时,添加验证码参数

如果验证码错误,返回验证码错误

验证码正确,且用户名密码正确,返回token


总结

以上所述是小编给大家介绍的实例详解Spring Boot实战之Redis缓存登录验证码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对PHPERZ网站的支持!



相关阅读 :
实例详解Spring Boot实战之Redis缓存登录验证码
实例详解Spring Boot实战之Redis缓存登录验证码
实例详解Spring Boot实战之Redis缓存登录验证码
详解Spring boot使用Redis集群替换mybatis二级缓存
详解spring boot starter redis配置文件
详解spring boot starter redis配置文件
详解spring boot starter redis配置文件
详解Spring-Boot集成Spring session并存入redis
详解Spring Boot使用redis实现数据缓存
redis数据结构之intset的实例详解
Spring Boot项目利用Redis实现session管理实例
Spring Boot项目利用Redis实现集中式缓存实例
最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 亚游 All Rights Reserved   冀ICP备14009818号  亚游  广告服务
厦门部分公办校资源被明码标价买卖?警方行拘3人 黑龙江:导游违法最高罚30万元 或移交司法机关 里约残奥会“5金王”因车祸身亡 曾破5项世界纪录 牛汇:市场避险风险退散 美元多头或王者归来 中粮期货试错交易:5月11日市场观察 日媒:中国公安就兵库留学生碎尸案与日方交换信息 美国经销商:美国农民愿意种大豆 然后销往中国 美华裔夫妇遭行刑式枪杀 警方公布监控悬赏三万 哈斯佩尔将成美国中情局首位女性局长 河南商丘城管民警冲突:警方接警称城管没拆迁令 津媒:泰达二转有意引进内援 乔纳森仍有重用机会 台“九合一选举”选务人员奇缺:工作繁重待遇下降
两位空军中将同日离世:生前是挚友 都曾击落敌机 副部和下属同谋欺瞒中央巡视组 出了大事 日为牵制中国出新招 鼓吹拉拢台韩加入CPTPP 美欲再对华1000亿美元商品征税 看中方如何强势回应 “剑桥分析”前员工出席美国国会听证会 朱啸虎:消费互联网创业企业想要避免站队非常困难 英国女王9月拍卖御用座驾 估价高达近两千万(图) 凯业必达赛冠军罕有旁落 拉姆为第五个非美籍赢家 虽然收购高通失败 但博通的收购扩张策略不会变 詹皇宿敌队轮休五虎蓄力!一切只为首轮干骑士 高通宣布100亿美元股票回购计划 股价盘后上涨逾2% 纳德拉再造微软:如何重回第一阵营?
最高检:纠正21件涉产权案 罪与非罪不清无罪处理 王毅:中国参与解决热点问题具有鲜明中国特色 俄警告美国:敢袭击叙利亚致俄人员伤亡俄将立即回击 趣店集团第一季度净利润3.158亿元 同比下滑32.1… 韩国防改革计划:裁减近12万陆军 缩短国民服役期 最高检谈惩治侵害未成年人犯罪:纠正有案不立 牛汇:美财长力挺总统政策 工资上涨不会引发通胀劲升 全英赛次日焦点:林丹冲8强 黄宇翔战斯里坎斯 中国科学家首次发现15.7亿年前地球氧化事件 女生最值得学的手艺 过年摆地摊赚10万 养一百只土鸡利润多少 女生适合开什么店 亚游