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

實(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| 久久日韩精品人妻一区二区| 亚洲综合日韩精品在线| 欧美一区二区三区高清正版| 美女福利视频一区二区| av剧情网址在线观看| 中文字幕日本乱码精品久久| 激情视频一区二区三区| 日本亚洲中文字幕网站| 一区二区人妻乳中文字幕| 日韩中文字幕资源一区| 久久亚洲国产成人精品性色| 亭亭丁香激情五月涩久久| 国产三级尤物在线观看| 一卡二卡三卡四卡日韩| 懂色一区二区三区精品视频| 2020年国产97精品自拍| 亚洲精品一区二区影院| 日日骚岛国中文字幕av| 激情欧美一区二区三区精品| 国产丝袜美腿诱惑久久| av一区二区日韩电影| 国产精品成人亚洲一区二区| 精品妇女一区二区三区| 日本av人妻在线观看| 国产亚洲欧美久久精品| 国产精品麻豆色哟哟av| 欧美一区二区国产精品日韩| 午夜精品一区二区三区亚洲| 成年人正常性生活频率| 亚洲少妇午夜福利视频| 日韩无砖区2021不卡| 国产成人免费自拍一区| 久久久精品免费福利视频| 日本黄色美女日本黄色| 国产精品一区在线播放| 黑人巨大欧美一区二区| 丰满少妇亚洲中文字幕| 亚洲人妻一区二区三区久久精品|