大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 Java學(xué)習(xí) 實(shí)現(xiàn)Java手機(jī)驗(yàn)證碼發(fā)送功能

實(shí)現(xiàn)Java手機(jī)驗(yàn)證碼發(fā)送功能

更新時(shí)間:2022-04-19 09:32:07 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2076次

實(shí)現(xiàn)Java手機(jī)驗(yàn)證碼發(fā)送功能?動(dòng)力節(jié)點(diǎn)小編告訴大家,首先我們需要找一個(gè)提供短信服務(wù)的商戶,隨便在哪里找都一樣,購買商家的短信服務(wù)后會(huì)拿到一些參數(shù),比如說請(qǐng)求地址,請(qǐng)求方式,token等,如下圖所示:

然后找到接口的調(diào)用樣例,按照調(diào)用樣例傳相應(yīng)的參數(shù)即可實(shí)現(xiàn)短信發(fā)送

這步?jīng)]什么說的,就是調(diào)用API,完成這步之后,就可以發(fā)送短信了,當(dāng)然這個(gè)是第一步,距離正式完成還差很遠(yuǎn)。

這里有一個(gè)小的細(xì)節(jié),就是我們發(fā)送短信,其中這個(gè)驗(yàn)證碼是我們自己生成的,然后以參數(shù)的形式傳給接口,所以這里的驗(yàn)證碼需要我們自己產(chǎn)生 貼一段產(chǎn)生驗(yàn)證碼的代碼

// 僅供參考 根據(jù)業(yè)務(wù)去生成即可
    // 生成驗(yàn)證碼
    StringBuilder builder = new StringBuilder();
     for (int i = 0; i < 6; i++) {
         int random = (int) (Math.random() * 10);
         builder.append(random);
     }
     String code = builder.toString();

第二步要做的操作就是要將第一步發(fā)送的驗(yàn)證碼,如果發(fā)送成功了的話,我們要將該驗(yàn)證碼保存起來,方便后續(xù)的驗(yàn)證,這里使用了SpringBoot整合Redis,直接使用RedisTemplente實(shí)現(xiàn)的,和原生實(shí)現(xiàn)是類似的,就是將驗(yàn)證碼和手機(jī)號(hào)存入Redis。

// 其中的ResultEntity是我個(gè)人封裝的一個(gè)返回結(jié)果 保存的是發(fā)送短信的結(jié)果 成功則存入Redis
// setRedisKeyValueRemoteWithTimeOut 是自己封裝的一個(gè)方法 功能為存入redis并且設(shè)置超時(shí)時(shí)間 
// 發(fā)送驗(yàn)證碼到phoneNum 獲取結(jié)果
ResultEntity<String> resultEntity = CrowdUtil.sendCodeShortMessage(
        messageProperties.getHost(),
        messageProperties.getPath(),
        messageProperties.getMethod(),
        phoneNum,
        "注冊(cè)",
        messageProperties.getAppCode(),
        messageProperties.getSmsSignId(),
        messageProperties.getTemplateId());
if (ResultEntity.SUCCESS.equals(resultEntity.getResult())) {
    // 驗(yàn)證碼
    String code = resultEntity.getData();
    // 設(shè)置key
    String key = CrowdConstant.REDIS_CODE_PREFIX + phoneNum;
    // 如果成功則將驗(yàn)證碼存入Redis 過期時(shí)間300秒 獲取存入redis的結(jié)果
    ResultEntity<String> saveCodeResultEntity = redisRemoteService.setRedisKeyValueRemoteWithTimeOut(key, code, 300, TimeUnit.SECONDS);
    if (ResultEntity.SUCCESS.equals(saveCodeResultEntity.getResult())) {
        return ResultEntity.successWithoutData();
    } else {
        return saveCodeResultEntity;
    }

第三步實(shí)現(xiàn)短信驗(yàn)證碼的驗(yàn)證

這步驟實(shí)現(xiàn)的功能就是驗(yàn)證短信驗(yàn)證碼是否匹配,這步驟核心操作就是將驗(yàn)證碼從Redis中取出來,和前端傳過來的數(shù)據(jù)進(jìn)行比對(duì),貼代碼

// 可以無視其中的一些拼接操作,這些拼接操作就是做一下標(biāo)識(shí),作為key。
// 核心是getRedisStringValueByKeyRemote方法 作用為獲取Redis中的驗(yàn)證碼
// 這里有一個(gè)注意事項(xiàng)就是驗(yàn)證碼使用過一次后需要?jiǎng)h除redis中的數(shù)據(jù),避免二次驗(yàn)證造成的數(shù)據(jù)不安全。
// 獲取手機(jī)號(hào)
String phoneNum = memberVO.getCardnum();
// 拼接redis中的key
String key = CrowdConstant.REDIS_CODE_PREFIX + phoneNum;
// 根據(jù)key查詢r(jià)edis 返回resultEntity 將value存入data
ResultEntity<String> redisResultEntity = redisRemoteService.getRedisStringValueByKeyRemote(key);
// 獲取結(jié)果集
String result = redisResultEntity.getResult(); 
if (ResultEntity.FAILED.equals(result)) {
    modelMap.addAttribute(CrowdConstant.ATTR_NAME_MESSAGE, redisResultEntity.getMessage());
    return "member-reg";
}
// 獲取redis的驗(yàn)證碼
String redisCode = redisResultEntity.getData(); 
if (redisCode == null) {
    modelMap.addAttribute(CrowdConstant.ATTR_NAME_MESSAGE, CrowdConstant.MESSAGE_CODE_NOT_EXISTS);
    return "member-reg";
}
// 獲取輸入的驗(yàn)證碼
String code = memberVO.getCode();
if (!Objects.equals(redisCode, code)) {
    modelMap.addAttribute(CrowdConstant.ATTR_NAME_MESSAGE, CrowdConstant.MESSAGE_CODE_FAILED);
    return "member-reg";
}
// 刪除redis中數(shù)據(jù)
redisRemoteService.removeRedisKeyRemote(key);

到這里我們驗(yàn)證碼幾乎就結(jié)束了,已經(jīng)實(shí)現(xiàn)了流程,由于我的那個(gè)驗(yàn)證碼套餐過期了,本人又十分貧窮,就沒有測(cè)試樣例啦,但是保證是可用的,前端調(diào)用方式直接一個(gè)Ajax請(qǐng)求調(diào)用發(fā)送驗(yàn)證碼存儲(chǔ)redis,然后在例如測(cè)試或登錄的業(yè)務(wù)中,去匹配驗(yàn)證碼即可。接下來給幾點(diǎn)拓展,各位可以自己實(shí)現(xiàn)

實(shí)現(xiàn)控制單手機(jī)號(hào)一天只能發(fā)送三條消息。

實(shí)現(xiàn)控制單ip一天只能發(fā)送是三條消息

實(shí)現(xiàn)消息60秒不能重復(fù)發(fā)送

提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 欧美交换乱理伦片在线观看 | 欧美精品专区免费观看 | 欧美日韩亚洲区久久综合 | 欧美久久久久欧美一区 | 久草色播 | 欧美三区在线 | 欧美国产综合在线 | 成人免费毛片观看 | 97在线观看免费观看高清 | 九九热视频精品在线观看 | 最新中文字幕一区 | 久久精品99久久香蕉国产色戒 | 国产探花在线观看 | 久久性生大片免费观看性 | 久久精品图片 | 亚洲精品线在线观看 | 国内外成人免费视频 | 青草五月天 | 日韩欧美在线不卡 | 爱爱一区 | 日韩一区精品视频在线看 | 亚洲性图第一页 | 韩国 欧美 日产 国产精品 | 99在线影院| 欧美日韩综合高清一区二区 | 日本欧美韩国专区 | 伊人网站 | 99影视网| 欧美高清不卡午夜精品免费视频 | 国产一二三区在线观看 | 四虎在线永久免费观看 | 国产精品美女一级在线观看 | 久久天天躁狠狠躁夜夜爽 | 欧美日韩中文国产一区二区三区 | 欧美九九 | 亚洲精品视频免费在线观看 | 精品亚洲永久免费精品 | 免费xxx | 亚洲日韩中文字幕一区 | 亚洲无吗在线视频 | 日本一片免费观看高清完整 |