欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

實(shí)例詳解SpringBoot實(shí)戰(zhàn)之Redis緩存登錄驗(yàn)證碼

本章簡單介紹redis的配置及使用方法,本文示例代碼在前面代碼的基礎(chǔ)上進(jìn)行修改添加,實(shí)現(xiàn)了使用redis進(jìn)行緩存驗(yàn)證碼,以及校驗(yàn)驗(yàn)證碼的過程。

創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)與策劃設(shè)計(jì),瀘州網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:瀘州等地區(qū)。瀘州做網(wǎng)站價(jià)格咨詢:18982081108

1、添加依賴庫(添加redis庫,以及第三方的驗(yàn)證碼庫)

       <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數(shù)據(jù)模版

新增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的基本使用(緩存生成的驗(yàn)證碼信息)

新建CaptchaModule.java,涉及redis插入操作關(guān)鍵代碼

@Autowired 
  private RedisTemplate<String, String> redisTemplate; 
//將驗(yàn)證碼以<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; //超時(shí)時(shí)間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) 
  { 
    //生成驗(yàn)證碼 
    String uuid = UUID.randomUUID().toString(); 
    Captcha captcha = new Captcha.Builder(captchaW, captchaH) 
        .addText().addBackground(new GradiatedBackgroundProducer()) 
        .gimp(new FishEyeGimpyRenderer()) 
        .build(); 
    //將驗(yàn)證碼以<key,value>形式緩存到redis 
    redisTemplate.opsForValue().set(uuid, captcha.getAnswer(), captchaExpires, TimeUnit.SECONDS); 
    //將驗(yàn)證碼key,及驗(yàn)證碼的圖片返回 
    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內(nèi)容的獲取(根據(jù)key獲取驗(yàn)證碼)

完善前面獲取token的流程,在獲取token的接口中添加校驗(yàn)驗(yàn)證碼的流程(根據(jù)登錄參數(shù)中的驗(yàn)證碼id獲取驗(yàn)證碼內(nèi)容,并與登錄參數(shù)中的驗(yàn)證碼內(nèi)容進(jìn)行比對(duì))

修改JsonWebToken.java

@Autowired 
  private RedisTemplate<String, String> redisTemplate; 
//驗(yàn)證碼校驗(yàn)在后面章節(jié)添加 
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)請(qǐng)求獲取驗(yàn)證碼,可以獲取到驗(yàn)證碼圖片,以及在cookie中返回緩存入redis的key值

實(shí)例詳解Spring Boot實(shí)戰(zhàn)之Redis緩存登錄驗(yàn)證碼

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

實(shí)例詳解Spring Boot實(shí)戰(zhàn)之Redis緩存登錄驗(yàn)證碼

3)登錄獲取token時(shí),添加驗(yàn)證碼參數(shù)

如果驗(yàn)證碼錯(cuò)誤,返回驗(yàn)證碼錯(cuò)誤

實(shí)例詳解Spring Boot實(shí)戰(zhàn)之Redis緩存登錄驗(yàn)證碼

驗(yàn)證碼正確,且用戶名密碼正確,返回token

實(shí)例詳解Spring Boot實(shí)戰(zhàn)之Redis緩存登錄驗(yàn)證碼

實(shí)例詳解Spring Boot實(shí)戰(zhàn)之Redis緩存登錄驗(yàn)證碼

總結(jié)

以上所述是小編給大家介紹的實(shí)例詳解Spring Boot實(shí)戰(zhàn)之Redis緩存登錄驗(yàn)證碼,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)創(chuàng)新互聯(lián)網(wǎng)站的支持!

本文題目:實(shí)例詳解SpringBoot實(shí)戰(zhàn)之Redis緩存登錄驗(yàn)證碼
URL地址:http://aaarwkj.com/article10/pcdsgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、面包屑導(dǎo)航、做網(wǎng)站、云服務(wù)器關(guān)鍵詞優(yōu)化、服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)
av天堂午夜在线观看| 亚洲国产欧美日韩国产| 激情网站免费在线观看| 欧美日韩另类综合久久久| 在线观看视频网站一卡二卡| 欧美一区二区三区日| 美女午夜福利一区二区| 最新日韩精品电影在线网| 亚洲欧洲日本一区精品| 91精品一久久香蕉国产| 久草热不卡的av在线| 亚洲精品色在线网站国产呦| 韩国av一区二区三区| 亚洲最大五月六月丁香婷婷| 未满18禁止观看在线| 国欧美一区二区三区| 久久精品色一情一乱一伦| 日韩蜜桃av一二三四区| 中文字幕九七精品乱码| 亚洲综合一区国产精品| 哪里可以看黄色片日韩| 欧美一区二区国产精品日韩| 人妻熟女在线一区二区| 久久精品女人天堂av免费观看| 97久久精品国产成人影院| 国产激情视频在线观看你懂的| 精品国产第一区二区三区| 97国产精品成人免费视频| 亚洲男人天堂日本一区| 国产精品亚洲在线视频| 日韩亚洲天堂视频免费观看| 情五月激情亚洲丁香佳色| 人妻系列日本在线播放| 国产伦精品一区二区三区免费视频| 蜜桃av网站免费观看| 夫妻性生活短是什么原因| 亚洲黄色成人免费观看| 免费搜索国产男女视频| 美女一区二区三区日本美女在线观看| 高清在线一区二区在线| 国产日韩欧美一区综合|