最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot發(fā)送短信驗(yàn)證碼的實(shí)例

 更新時(shí)間:2022年02月21日 14:55:44   作者:芝蘭生于深谷  
第三方短信發(fā)送平臺(tái)有很多種,各個(gè)平臺(tái)有各自的優(yōu)缺點(diǎn),在選擇的時(shí)候可以根據(jù)自己的具體實(shí)際情況定奪,本文主要介紹了SpringBoot發(fā)送短信驗(yàn)證碼的實(shí)例,感興趣的可以了解一下

1、注冊(cè)短信通賬號(hào)

網(wǎng)址:http://sms.webchinese.cn

在這里插入圖片描述

在這里插入圖片描述

2、導(dǎo)入依賴

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring5</artifactId>
        </dependency>
        <dependency>
            <groupId>org.thymeleaf.extras</groupId>
            <artifactId>thymeleaf-extras-java8time</artifactId>
        </dependency>
        <dependency>
            <groupId>org.thymeleaf.extras</groupId>
            <artifactId>thymeleaf-extras-springsecurity5</artifactId>
        </dependency>
		<!--短信驗(yàn)證依賴導(dǎo)入-->
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>3.0.1</version>
        </dependency>

3、隨機(jī)驗(yàn)證碼的工具類

public class CodeUtil {

    @Bean
    public PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }
    
    /**
     * 隨機(jī)生成6位驗(yàn)證碼
     *
     */
    public String getRandomCode(Integer code){
        Random random = new Random();
        StringBuffer result= new StringBuffer();
        for (int i=0;i<code;i++){
            result.append(random.nextInt(10));
        }
        return result.toString();
    }
    
    //保存驗(yàn)證碼和時(shí)間
    public Code saveCode(String code){
        Code code1=new Code();
        SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
        Calendar c = Calendar.getInstance();
        c.add(Calendar.MINUTE, 5);
        String currentTime = sf.format(c.getTime());// 生成5分鐘后時(shí)間,用戶校驗(yàn)是否過(guò)期
        //驗(yàn)證碼加密
        String encode=passwordEncoder().encode(code);
        code1.setCode(encode);
        code1.setCurrentTime(currentTime);
        return code1;
    }
    
    /**
     * 解密處理
     * @param code 輸入
     * @param code1 目標(biāo)
     */
    public Boolean deciphering(String code,String code1){
        boolean matches = passwordEncoder().matches(code,code1);
        return matches;
    }


}

4、短信發(fā)送工具類

@Component
public class TelMessageUtil {
    private static final String SMS_Url = "http://sms.webchinese.cn/web_api/";

    /**
     * @param Uid SMS用戶id
     * @param Key 接口秘鑰:SMS登錄可查(非登錄密碼)
     * @param sendPhoneNum 短信發(fā)送目標(biāo)號(hào)碼
     * @param desc 短信內(nèi)容
     * @return Integer(1:成功碼,其他失敗,具體參見注釋)
     */
    public static Integer send(String Uid,String Key,String sendPhoneNum,String desc){
    
        HttpClient client = new HttpClient();
        PostMethod post = new PostMethod(SMS_Url);
        post.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gbk");// 在頭文件中設(shè)置轉(zhuǎn)碼
    
        //設(shè)置參數(shù)
        NameValuePair[] data = {
                new NameValuePair("Uid", Uid),
                new NameValuePair("Key", Key),//秘鑰
                new NameValuePair("smsMob", sendPhoneNum),
                new NameValuePair("smsText", desc)
        };
    
        post.setRequestBody(data);
    
        try {
            client.executeMethod(post);
        } catch (Exception e) {  e.printStackTrace();  }


        Header[] headers = post.getResponseHeaders();
        int statusCode = post.getStatusCode();
        System.out.println("statusCode:" + statusCode);
        for (Header h : headers) {
            System.out.println(h.toString());
        }
    
        String result ="";
        try {
            result = new String(post.getResponseBodyAsString().getBytes("gbk"));
        } catch (Exception e) {  e.printStackTrace();  }
    
        post.releaseConnection();
    
        return Integer.parseInt(result);
    }
    /**
     *  -1  沒(méi)有該用戶賬戶
     -2     接口密鑰不正確 [查看密鑰]不是賬戶登陸密碼
     -21    MD5接口密鑰加密不正確
     -3     短信數(shù)量不足
     -11    該用戶被禁用
     -14    短信內(nèi)容出現(xiàn)非法字符
     -4     手機(jī)號(hào)格式不正確
     -41    手機(jī)號(hào)碼為空
     -42    短信內(nèi)容為空
     -51    短信簽名格式不正確接口簽名格式為:【簽名內(nèi)容】
     -6     IP限制
     大于0   短信發(fā)送數(shù)量
     以上作為補(bǔ)充
     */
    public static String getMessage(Integer code){
        String message;
        if(code > 0 ) {
            message = "SMS-f發(fā)送成功!短信量還有" + code + "條";
        }else if(code == -1){
            message = "SMS-沒(méi)有該用戶賬戶";
        }else if(code == -2){
            message = "SMS-接口密鑰不正確";
        }else if(code == -21){
            message = "SMS-MD5接口密鑰加密不正確";
        }else if(code == -3){
            message = "SMS-短信數(shù)量不足";
        }else if(code == -11){
            message = "SMS-該用戶被禁用";
        }else if(code == -14){
            message = "SMS-短信內(nèi)容出現(xiàn)非法字符";
        }else if(code == -4){
            message = "SMS-手機(jī)號(hào)格式不正確";
        }else if(code == -41){
            message = "SMS-手機(jī)號(hào)碼為空";
        }else if(code == -42){
            message = "SMS-短信內(nèi)容為空";
        }else if(code == -51){
            message = "SMS-短信簽名格式不正確接口簽名格式為:【簽名內(nèi)容】";
        }else if(code == -6){
            message = "SMS-IP限制";
        }else{
            message = "其他錯(cuò)誤";
        }
        return message;
    }


}

5、測(cè)試

	//前臺(tái)驗(yàn)證手機(jī)號(hào)
    @RequestMapping("/checkTel")
    public String checkTel(@RequestParam("tel") String tel,
                           HttpSession session,
                           Model model){
        Users users=new Users();
        users.setTel(tel);
        if (loginService.CheckOnly(users)) {
            model.addAttribute("msg","沒(méi)有此用戶,請(qǐng)注冊(cè)!");
            return "register";
        }else {
            model.addAttribute("info","已向你的手機(jī)號(hào)為"+tel+"發(fā)送了驗(yàn)證碼");
            Long id = loginService.findIdByTel(tel);
            session.setAttribute("user_id",id);
            //發(fā)送驗(yàn)證碼
            CodeUtil codeUtil=new CodeUtil();
            //獲取六位驗(yàn)證碼
            String randomCode = codeUtil.getRandomCode(6);
            //先清除session域
            session.removeAttribute("checkCode");
            //加密驗(yàn)證碼存放session域中
            session.setAttribute("checkCode",codeUtil.passwordEncoder().encode(randomCode));
            Integer resultCode = TelMessageUtil.send("****","************",tel,
                    "【高校志愿者平臺(tái)】你的驗(yàn)證碼為【"+randomCode+"】(若不是本人操作,可忽略該條郵件)"
            );
            System.out.println("日志信息"+resultCode);
            return "updatePwd";
        }
    }

到此這篇關(guān)于SpringBoot發(fā)送短信驗(yàn)證碼的實(shí)例的文章就介紹到這了,更多相關(guān)SpringBoot 短信驗(yàn)證碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java Spring攔截器案例詳解

    Java Spring攔截器案例詳解

    這篇文章主要介紹了Java Spring攔截器案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Springboot創(chuàng)建項(xiàng)目的圖文教程(idea版本)

    Springboot創(chuàng)建項(xiàng)目的圖文教程(idea版本)

    這篇文章主要介紹了Springboot創(chuàng)建項(xiàng)目的圖文教程(idea版本),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Java的Jackson庫(kù)中復(fù)雜對(duì)象集合的幾種簡(jiǎn)單轉(zhuǎn)換

    Java的Jackson庫(kù)中復(fù)雜對(duì)象集合的幾種簡(jiǎn)單轉(zhuǎn)換

    本文主要介紹了Java的Jackson庫(kù)中復(fù)雜對(duì)象集合的幾種簡(jiǎn)單轉(zhuǎn)換。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • IDEA 2021配置JavaWeb項(xiàng)目超詳細(xì)教程

    IDEA 2021配置JavaWeb項(xiàng)目超詳細(xì)教程

    本文通過(guò)圖文并茂的形式給大家介紹IDEA 2021配置JavaWeb項(xiàng)目的過(guò)程,內(nèi)容簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-08-08
  • Springboot如何根據(jù)實(shí)體類生成數(shù)據(jù)庫(kù)表

    Springboot如何根據(jù)實(shí)體類生成數(shù)據(jù)庫(kù)表

    這篇文章主要介紹了Springboot如何根據(jù)實(shí)體類生成數(shù)據(jù)庫(kù)表的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java中的while循環(huán)語(yǔ)句詳細(xì)講解

    Java中的while循環(huán)語(yǔ)句詳細(xì)講解

    這篇文章主要給大家介紹了關(guān)于Java中while循環(huán)語(yǔ)句的相關(guān)資料,while循環(huán)是一種在編程中常見的控制流語(yǔ)句,它允許代碼在特定條件下(通常是一個(gè)布爾表達(dá)式)重復(fù)執(zhí)行一段代碼,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • 詳解如何使用MyBatis簡(jiǎn)化JDBC開發(fā)

    詳解如何使用MyBatis簡(jiǎn)化JDBC開發(fā)

    JavaEE?企業(yè)級(jí)?Java?項(xiàng)目中的經(jīng)典三層架構(gòu)為表現(xiàn)層,業(yè)務(wù)層和持久層.MyBatis?對(duì)?JDBC?代碼進(jìn)行了封裝,作為一款優(yōu)秀的持久層框架,專門用于簡(jiǎn)化JDBC開發(fā).本文主要介紹一下如何使用MyBatis簡(jiǎn)化JDBC開發(fā),需要的可以參考一下
    2023-01-01
  • ava實(shí)現(xiàn)一致性Hash算法

    ava實(shí)現(xiàn)一致性Hash算法

    本文主要詳細(xì)介紹了Java如何實(shí)現(xiàn)一致性Hash算法,其實(shí)現(xiàn)原理將key映射到?2^32?-?1?的空間中,將這個(gè)數(shù)字的首尾相連,形成一個(gè)環(huán)。想了解更多的同學(xué),可以參考本文
    2023-03-03
  • 如何基于java或js獲取URL返回狀態(tài)碼

    如何基于java或js獲取URL返回狀態(tài)碼

    這篇文章主要介紹了如何基于java或js獲取URL返回狀態(tài)碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Java集合之HashMap用法詳解

    Java集合之HashMap用法詳解

    這篇文章主要介紹了Java集合之HashMap用法,結(jié)合實(shí)例形式分析了java map集合中HashMap定義、遍歷等相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05

最新評(píng)論

长治县| 杭州市| 聂荣县| 齐齐哈尔市| 黔西| 东平县| 三门峡市| 武城县| 新乡县| 峨眉山市| 五常市| 仙桃市| 义马市| 离岛区| 靖州| 仙游县| 华亭县| 平陆县| 双柏县| 定结县| 大竹县| 宝坻区| 新巴尔虎左旗| 乐业县| 清流县| 大邑县| 济源市| 聊城市| 河南省| 张家港市| 十堰市| 庄河市| 龙胜| 金乡县| 霍邱县| 多伦县| 呈贡县| 冕宁县| 雷波县| 永修县| 当阳市|