在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    SpringBoot校驗手機驗證碼例:默認緩存、數據淘汰策略、redis緩存

    SpringBoot校驗手機驗證碼例:默認緩存、數據淘汰策略、redis緩存

    目錄

    案例實現(xiàn)功能:

    1 根據手機號碼 生成6位數 的數字 驗證碼

    2 輸入手機號和驗證碼, 判斷輸入的驗證碼是否正確

    一 默認緩存

    1.1 主要代碼

    1 添加依賴

    org.springframework.bootspring-boot-starter-cache

    2 啟用緩存

    3 實體類

    package com.qing.bean;import lombok.Data;@Datapublic class SMSCode { private String phoneNum; private String code;}

    4 創(chuàng)建驗證碼的工具

    package com.qing.util;import org.springframework.cache.annotation.Cacheable;import org.springframework.stereotype.Component;@Componentpublic class CodeUtils { public String generate(String phoneNum) { int hash = phoneNum.hashCode(); int encryption = 2022630; //異或加密:一種通過異或運算進行加密的算法 //轉成二進制,運算規(guī)則:相同為0,不同為1,再轉成十進制 long result = hash ^ encryption; long nowTime = System.currentTimeMillis(); result = result ^ nowTime; long code = result % 1000000; //處理有負數的情況 code = code < 0 ? -code : code; //六位數:前面補0 String.format("%06d",code); return code + ""; } //獲取緩存里的驗證碼 @Cacheable(key ="#phoneNum" ,value = "cacheCode") public String getCacheCode(String phoneNum){ return null; }}

    關于異或運算請點這里

    說明:getCacheCode()獲取緩存里的驗證碼的方法,寫在工具類這里是因為要使spring的@Cacheable這個注解生效,需要注入spring容器,該工具類在后面的ServiceImpl進行了注入,該方法返回的是注解@Cacheable的value屬性值 cacheCode ( 詳見后面的測試 )

    5 service

    package com.qing.service;import com.qing.bean.SMSCode;public interface SMSCodeService { //發(fā)送驗證碼 String sendCode(String phoneNum); //檢查驗證碼 boolean checkCode(SMSCode smsCode);}

    6 serviceImpl

    package com.qing.service.impl;import com.qing.bean.SMSCode;import com.qing.service.SMSCodeService;import com.qing.util.CodeUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.cache.annotation.CachePut;import org.springframework.stereotype.Service;@Servicepublic class SMSCodeServiceImpl implements SMSCodeService { @Autowired CodeUtils codeUtils; //發(fā)送驗證碼 @Override //只往里放,不往外讀 @CachePut(key = “#phoneNum”, value = “cacheCode”) public String sendCode(String phoneNum) { return codeUtils.generate(phoneNum); } //比對驗證碼 @Override public boolean checkCode(SMSCode smsCode) { //取出內存中的驗證碼與傳遞過來的驗證碼比對,相同返回true String code = smsCode.getCode(); String cacheCode = codeUtils.getCacheCode(smsCode.getPhoneNum()); return code.equals(cacheCode); }}

    7 controller

    package com.qing.controller;import com.qing.bean.SMSCode;import com.qing.service.SMSCodeService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.*;@RestController@RequestMapping(“/sms”)public class SMSCodeController { @Autowired private SMSCodeService smsCodeService; @GetMapping(“/{phoneNum}”) public String getCode(@PathVariable String phoneNum){ return smsCodeService.sendCode(phoneNum); } @PostMapping public boolean checkCode(@RequestBody SMSCode smsCode) { return smsCodeService.checkCode(smsCode); }}

    1.2 測試

    1 生成驗證碼

    2 輸入錯的驗證碼驗證

    3 輸入正確的驗證碼

    4 再次生成驗證

    二 Ehcache緩存

    在默認緩存案例的基礎上做3個配置就行

    1 加依賴

    net.sf.ehcache ehcache

    2 配置文件

    3 ehcache.xml放在resources下

    默認緩存

    配置新的緩存: name 要和@CachePut注解的的value的屬性值一樣

    數據淘汰策略

    下圖表示的信息:

    1 下面的時間分別表示最后一次訪問是在 第幾秒訪問的

    2 上面的數字表示 訪問了幾次

    LRU:age 是上次訪問離現(xiàn)在的時間最遠的

    LFU:gender 訪問次數是最少的

    四 redis緩存

    4.1 基礎使用

    在默認緩存的基礎上加2個配置

    1 導入依賴

    org.springframework.boot spring-boot-starter-data-redis

    2 配置文件

    測試

    打開redis的服務端和客戶端

    關于redis的安裝和簡單使用在這里

    生成一次驗證碼

    數據已經進到redis緩存里了

    緩存的名字即這個value屬性的值 和 key 電話號碼組合成一個新的key一起放進redis緩存里

    再生成一次驗證碼

    redis又多了一個緩存數據

    4.2 其他配置

    測有效時間 10s

    看一下測試效果

    10s之后緩存里的驗證碼失效了

    備注: 超過了有效時長,redis數據里就沒有那個緩存了

    測前綴

    總結

    原文 https://blog.csdn.net/m0_45877477/article/details/125539400

    鄭重聲明:本文內容及圖片均整理自互聯(lián)網,不代表本站立場,版權歸原作者所有,如有侵權請聯(lián)系管理員(admin#wlmqw.com)刪除。
    用戶投稿
    上一篇 2022年7月11日 15:21
    下一篇 2022年7月11日 15:22

    相關推薦

    • 微信怎么添加整套表情包(微信怎么添加表情包)

      用微信怎樣把手機上的照片添加到你的微信表情包里?然后發(fā)送給朋友,真的太好玩,太有個性了!操作還簡單,和我一起去看看! 打開微信,點開與好友的聊天頁面,通常我們需要添加表情的話,我們…

      2022年11月26日
    • 舊手機的東西怎么導入新手機(舊手機的東西怎么導入新手機oppo)

      簡要回答 下載并運行“互傳”–點擊“我是舊手機”–確認換機,接下來我們一起看看吧。 詳細內容 01 請將新、舊手機分別安裝換機助手,如圖,左邊是新手機,右邊是舊手機,兩款手機系不同…

      2022年11月25日
    • 《寶可夢朱紫》獒教父屬性是什么?獒教父屬性一覽

      寶可夢朱紫里獒教父是一只很強的寶可夢,很多玩家不清楚獒教父的屬性是什么樣的,下面就給大家?guī)韺毧蓧糁熳祥峤谈笇傩砸挥[,感興趣的小伙伴一起來看看吧,希望能幫助到大家。 獒教父屬性一覽…

      2022年11月25日
    • 《寶可夢朱紫》太晶化強力寶可夢推薦 太晶化哪些寶可夢最強?

      寶可夢朱紫游戲中寶可夢種類繁多,不過有的寶可夢比較強,有的稍弱一些,那么太晶化化哪些寶可夢最強呢,為了便于大家更好的體驗游戲,這里給大家?guī)砹藢毧蓧糁熳咸Щ瘡娏毧蓧敉扑],一起來…

      2022年11月25日
    • 5+3疫情防控從哪天開始算(遼寧疫情防控最新政策)

      最近有關國內各地的疫情大家也都有在持續(xù)關注,目前國內各地疫情隔離時間也根據二十條防控措施有了新的調整。那么,5+3疫情防控從哪天開始算?對于密接的5+3隔離時間計算大家還是比較關心…

      2022年11月25日
    • 藍碼怎么變綠碼需要幾天(藍碼怎么變綠碼需要幾天)

      大家都知道健康碼的顏色有紅碼、綠碼、黃碼,近日湖南健康碼上線“藍碼”,不少小伙伴發(fā)現(xiàn)自己健康碼變藍了,都想趕緊恢復綠碼,那么藍碼怎么變綠碼需要幾天?下面小編為大家?guī)硭{碼變綠碼需要…

      2022年11月25日
    • 寶可夢朱紫四大天王屬性怎么樣 四大天王屬性數值介紹

      寶可夢朱紫四大天王屬性如何?四大天王的屬性數值玩家們還是挺好奇的,想要了解四大天王屬性的可以看看下面小編的介紹,小編會把四大天王的屬性數值全都分享在下面,各位趕緊來小編這里多了解一…

      2022年11月25日
    • 寶可夢朱紫皮卡丘多少級進化 皮卡丘進化條件攻略

      寶可夢朱紫皮卡丘進化條件是什么?皮卡丘怎么進化?作為最受歡迎的電屬性寶可夢,大家都很想知道皮卡丘進化的方法,今天小編這就在下面的攻略中分享皮卡丘進化條件,各位可以趕緊來小編這里了解…

      2022年11月25日
    • 拼多多百億補貼預售一般多久發(fā)貨(拼多多百億補貼預售)

      拼多多里面有很多優(yōu)惠活動,其中百億補貼活動非?;鸨?,一些里面的東西價格比別的平臺便宜,質量也有保障,還有預售的活動,那么拼多多百億補貼預售一般多久發(fā)貨?下面小編為大家?guī)砥炊喽喟賰|…

      2022年11月25日
    • 北京疫情多久能解除封控(北京疫情還要多久結束)

      最近一段時間北京疫情形勢備受關注,馬上就要到年底了,不少人想要去北京辦事,。都非常關注當地疫情相關政策,那么 北京疫情多久能解除封控?北京疫情什么時候恢復正常生活?下面小編為大家?guī)А?/p>

      2022年11月25日

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時間:周一至周五,10:30-18:30,節(jié)假日休息