SSM項目實現短信驗證碼登錄功能的示例代碼
1.登入網站 zz短信平臺
http://sms_developer.zhenzikj.com/zhenzisms_user/login.html
導入pom依賴
<dependency> <groupId>com.zhenzikj</groupId> <artifactId>zhenzisms</artifactId> <version>2.0.2</version> </dependency>
2.導入工具類MessageUtil
package kj15.util; import com.alibaba.fastjson.JSONObject; import com.zhenzi.sms.ZhenziSmsClient; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import java.util.Properties; public class MessageUtil { private static String apiUrl; private static String appId; private static String appSecret; static { InputStream resourceAsStream = MessageUtil.class.getClassLoader().getResourceAsStream("messageUtil.properties"); Properties properties = new Properties(); try { properties.load(resourceAsStream); apiUrl = properties.getProperty("apiUrl"); appId = properties.getProperty("appId"); appSecret = properties.getProperty("appSecret"); } catch (IOException e) { e.printStackTrace(); } } public static boolean sendMessage(String number,String templateId,String randomCode,String timeDesc){ if(apiUrl==null||appId==null||appSecret==null){ return false; } // String apiUrl="https://sms_developer.zhenzikj.com"; // String appId="111566";//在控制臺的 我的應用 // String appSecret="6831ecde-9823-40de-8354-bf33c7afd819";//在控制臺的 我的應用 ZhenziSmsClient client = new ZhenziSmsClient(apiUrl, appId, appSecret); Map<String, Object> params = new HashMap<String, Object>(); params.put("number",number);//你要發送的手機號 params.put("templateId",templateId);//短信模板裡的 String[] templateParams = new String[2];//模板 templateParams[0] = randomCode; templateParams[1] = timeDesc; params.put("templateParams", templateParams); String result = null; try { result = client.send(params); } catch (Exception e) { e.printStackTrace(); return false; } System.out.println(result); JSONObject jsonObject = JSONObject.parseObject(result); if("0".equals(jsonObject.get("code").toString())){ return true; }else { return false; } } }
配置messageUtil.properties
apiUrl=https://sms_developer.zhenzikj.com appId=111233 appSecret=6831ecde-9823-40de-8354-17afd831119
3.ajax 模塊
$("#send").click(function () { // $('#captcha').empty(); jigsaw.init(document.getElementById('captcha'), function () { alert("驗證成功"); $('#captcha').empty(); sendMsg($("#send")); }); }); //用ajax提交到後臺的發送短信接口 function sendMsg(obj) { var phone = $("#phone").val(); var result = isPhoneNum(); if (result) { $.ajax({ url: "/sendMsg?phone=" + phone, data: {}, dataType: "text", type: "get", contentType: "application/json", success: function (res) { if (res == 1) { alert("---------驗證碼發送成功---------"); } else { alert("---------驗證碼發送失敗---------"); } }, error: function () { alert("網絡正忙!"); } }); //開始倒計時 setTime(obj); } }
4. html頁面
<section style="flex-direction: column;"> <!-- 背景顏色 --> <div class="color"></div> <div class="color"></div> <div class="color"></div> <div class="box"> <!-- 背景圓 --> <div class="circle" style="--x:0"></div> <div class="circle" style="--x:1"></div> <div class="circle" style="--x:2"></div> <div class="circle" style="--x:3"></div> <div class="circle" style="--x:4"></div> <!-- 登錄框 --> <div id="containers" > <div class="form"> <h2 style="color:blue;">用戶註冊系統</h2> <form action="" id="fm"> <div class="item-inner"> <div class="inputBox"> <input type="text" placeholder="用戶名" name="username" style="color: saddlebrown"> </div> <div class="inputBox"> <input type="password" placeholder="密碼" name="password"> </div> <div class="inputBox"> <input type="text" placeholder="身份證號" name="idcard" style="color: saddlebrown"> </div> <span class="forget"> <span> 性別:</span> <span><input type="radio" name="sex" value="男" checked="checked"/>男</span> <span> <input type="radio" name="sex" value="女"/>女</span> </span> <div class="inputBox"> <input type="text" name="address" placeholder="居住地址" style="color: saddlebrown"> </div> <div class="inputBox"> <div> <input type="text" id="phone" class="form-control" placeholder="請輸入手機號碼" name="phone" style="color: saddlebrown"> </div> </div> <div class="inputBox"> <input type="text" name="securityCode" class="form-control" placeholder="請輸入驗證碼" style="color: saddlebrown"> </div> </div> </form> <div style="justify-content:flex-end;display: flex;"> <button type="button" class="btn btn-info" id="send">點擊獲取驗證碼</button> </div> <div class="inputBox" align="center"> <button onclick="toRegister()" style="width: 150px;height: 40px;background-color: beige" id="registerBut">註冊 </button> </div> </div> </div> </div> <div class="container"> <div id="captcha" style="position: relative"></div> </div> </section>
5.編寫controller層
@Controller public class RegisterController { @RequestMapping("/sendMsg") @ResponseBody public String sendMsg(@RequestParam String phone, HttpSession session){ String randomValue = String.valueOf(RandomValueUtil.getNum(1001, 9999)); session.setAttribute("randomValue",randomValue); System.err.println("-----------------------------我進來發短信瞭-----------------------------"+phone); boolean b = MessageUtil.sendMessage(phone, "9262",randomValue, "5分鐘"); System.err.println("-----------------------------獲取結果-----------------------------"+b); if(b){ return "1"; } return "2"; } }
RandomValueUtil工具類隨機生成驗證碼
package kj15.util; import java.util.HashMap; import java.util.Map; /** * @description: * @author Zhoudalf * @date 2022-04-13 17:07:59 * */ public class RandomValueUtil { public static String base = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; private static String firstName = "趙錢孫李周吳鄭王馮陳褚衛蔣沈韓楊朱秦尤許何呂施張孔曹嚴華金魏陶薑戚謝鄒喻柏水竇章雲蘇潘葛奚范彭郎魯韋昌馬苗鳳花方俞任袁柳酆鮑史唐費廉岑薛雷賀倪湯滕殷羅畢郝鄔安常樂於時傅皮卞齊康伍餘元卜顧孟平黃和穆蕭尹姚邵湛汪祁毛禹狄米貝明臧計伏成戴談宋茅龐熊紀舒屈項祝董梁杜阮藍閔席季麻強賈路婁危江童顏郭梅盛林刁鐘徐邱駱高夏蔡田樊胡凌霍虞萬支柯咎管盧莫經房裘繆幹解應宗宣丁賁鄧鬱單杭洪包諸左石崔吉鈕龔程嵇邢滑裴陸榮翁荀羊於惠甄魏加封芮羿儲靳汲邴糜松井段富巫烏焦巴弓牧隗山谷車侯宓蓬全郗班仰秋仲伊宮寧仇欒暴甘鈄厲戎祖武符劉薑詹束龍葉幸司韶郜黎薊薄印宿白懷蒲臺從鄂索咸籍賴卓藺屠蒙池喬陰鬱胥能蒼雙聞莘黨翟譚貢勞逄姬申扶堵冉宰酈雍卻璩桑桂濮牛壽通邊扈燕冀郟浦尚農溫別莊晏柴瞿閻充慕連茹習宦艾魚容向古易慎戈廖庚終暨居衡步都耿滿弘匡國文寇廣祿闕東毆殳沃利蔚越夔隆師鞏厙聶晁勾敖融冷訾辛闞那簡饒空曾毋沙乜養鞠須豐巢關蒯相查後江紅遊竺權逯蓋益桓公萬俟司馬上官歐陽夏侯諸葛聞人東方赫連皇甫尉遲公羊澹臺公冶宗政濮陽淳於仲孫太叔申屠公孫樂正軒轅令狐鐘離閭丘長孫慕容鮮於宇文司徒司空亓官司寇仉督子車顓孫端木巫馬公西漆雕樂正壤駟公良拓拔夾谷宰父谷粱晉楚閻法汝鄢塗欽段幹百裡東郭南門呼延歸海羊舌微生嶽帥緱亢況後有琴梁丘左丘東門西門商牟佘佴伯賞南宮墨哈譙笪年愛陽佟第五言福百傢姓續"; private static String girl = "秀娟英華慧巧美娜靜淑惠珠翠雅芝玉萍紅娥玲芬芳燕彩春菊蘭鳳潔梅琳素雲蓮真環雪榮愛妹霞香月鶯媛艷瑞凡佳嘉瓊勤珍貞莉桂娣葉璧璐婭琦晶妍茜秋珊莎錦黛青倩婷姣婉嫻瑾穎露瑤怡嬋雁蓓紈儀荷丹蓉眉君琴蕊薇菁夢嵐苑婕馨瑗琰韻融園藝詠卿聰瀾純毓悅昭冰爽琬茗羽希寧欣飄育瀅馥筠柔竹靄凝曉歡霄楓蕓菲寒伊亞宜可姬舒影荔枝思麗 "; private static String boy = "偉剛勇毅俊峰強軍平保東文輝力明永健世廣志義興良海山仁波寧貴福生龍元全國勝學祥才發武新利清飛彬富順信子傑濤昌成康星光天達安巖中茂進林有堅和彪博誠先敬震振壯會思群豪心邦承樂紹功松善厚慶磊民友裕河哲江超浩亮政謙亨奇固之輪翰朗伯宏言若鳴朋斌梁棟維啟克倫翔旭鵬澤晨辰士以建傢致樹炎德行時泰盛雄琛鈞冠策騰楠榕風航弘"; private static String[] road = "南京大廈,黑龍江路,十梅庵街,遵義路,湘潭街,瑞金廣場,仙山街,仙山東路,仙山西大廈,白沙河路,趙紅廣場,機場路,民航街,長城南路,流亭立交橋,虹橋廣場,長城大廈,禮陽路,風崗街,中川路,白塔廣場,興陽路,文陽街,繡城路,河城大廈,錦城廣場,崇陽街,華城路,康城街,正陽路,和陽廣場,中城路,江城大廈,順城路,安城街,山城廣場,春城街,國城路,泰城街,德陽路,明陽大廈,春陽路,艷陽街,秋陽路,碩陽街,青威高速,瑞陽街,豐海路,雙元大廈,惜福鎮街道,夏莊街道,古廟工業園,中山街,太平路,廣西街,濰縣廣場,博山大廈,湖南路,濟寧街,芝罘路,易州廣場,荷澤四路,荷澤二街,荷澤一路,荷澤三大廈,觀海二廣場,廣西支街,觀海一路,濟寧支街,莒縣路,平度廣場,明水路,蒙陰大廈,青島路,湖北街,江寧廣場,郯城街,天津路,保定街,安徽路,河北大廈,黃島路,北京街,莘縣路,濟南街,寧陽廣場,日照街,德縣路,新泰大廈,荷澤路,山西廣場,沂水路,肥城街,蘭山路,四方街,平原廣場,泗水大廈,浙江路,曲阜街,壽康路,河南廣場,泰安路,大沽街,紅山峽支路,西陵峽一大廈,臺西緯一廣場,臺西緯四街,臺西緯二路,西陵峽二街,西陵峽三路,臺西緯三廣場,臺西緯五路,明月峽大廈,青銅峽路,臺西二街,觀音峽廣場,瞿塘峽街,團島二路,團島一街,臺西三路,臺西一大廈,鄆城南路,團島三街,劉傢峽路,西藏二街,西藏一廣場,臺西四街,三門峽路,城武支大廈,紅山峽路,鄆城北廣場,龍羊峽路,西陵峽街,臺西五路,團島四街,石村廣場,巫峽大廈,四川路,壽張街,嘉祥路,南村廣場,范縣路,西康街,雲南路,巨野大廈,西江廣場,魚臺街,單縣路,定陶街,滕縣路,鉅野廣場,觀城路,汶上大廈,朝城路,滋陽街,鄒縣廣場,濮縣街,磁山路,汶水街,西藏路,城武大廈,團島路,南陽街,廣州路,東平街,棗莊廣場,貴州街,費縣路,南海大廈,登州路,文登廣場,信號山支路,延安一街,信號山路,興安支街,福山支廣場,紅島支大廈,萊蕪二路,吳縣一街,金口三路,金口一廣場,伏龍山路,魚山支街,觀象二路,吳縣二大廈,萊蕪一廣場,金口二街,海陽路,龍口街,恒山路,魚山廣場,掖縣路,福山大廈,紅島路,常州街,大學廣場,龍華街,齊河路,萊陽街,黃縣路,張店大廈,祚山路,蘇州街,華山路,伏龍街,江蘇廣場,龍江街,王村路,琴嶼大廈,齊東路,京山廣場,龍山路,牟平街,延安三路,延吉街,南京廣場,東海東大廈,銀川西路,海口街,山東路,紹興廣場,芝泉路,東海中街,寧夏路,香港西大廈,隆德廣場,揚州街,鄖陽路,太平角一街,寧國二支路,太平角二廣場,天臺東一路,太平角三大廈,漳州路一路,漳州街二街,寧國一支廣場,太平角六街,太平角四路,天臺東二街,太平角五路,寧國三大廈,澳門三路,江西支街,澳門二路,寧國四街,大堯一廣場,咸陽支街,洪澤湖路,吳興二大廈,澄海三路,天臺一廣場,新湛二路,三明北街,新湛支路,湛山五街,泰州三廣場,湛山四大廈,閩江三路,澳門四街,南海支路,吳興三廣場,三明南路,湛山二街,二輕新村鎮,江南大廈,吳興一廣場,珠海二街,嘉峪關路,高郵湖街,湛山三路,澳門六廣場,泰州二路,東海一大廈,天臺二路,微山湖街,洞庭湖廣場,珠海支街,福州南路,澄海二街,泰州四路,香港中大廈,澳門五路,新湛三街,澳門一路,正陽關街,寧武關廣場,閩江四街,新湛一路,寧國一大廈,王傢麥島,澳門七廣場,泰州一路,泰州六街,大堯二路,青大一街,閩江二廣場,閩江一大廈,屏東支路,湛山一街,東海西路,徐傢麥島函谷關廣場,大堯三路,曉望支街,秀湛二路,逍遙三大廈,澳門九廣場,泰州五街,澄海一路,澳門八街,福州北路,珠海一廣場,寧國二路,臨淮關大廈,燕兒島路,紫荊關街,武勝關廣場,逍遙一街,秀湛四路,居庸關街,山海關路,鄱陽湖大廈,新湛路,漳州街,仙遊路,花蓮街,樂清廣場,巢湖街,臺南路,吳興大廈,新田路,福清廣場,澄海路,莆田街,海遊路,鎮江街,石島廣場,宜興大廈,三明路,仰口街,沛縣路,漳浦廣場,大麥島,臺灣街,天臺路,金湖大廈,高雄廣場,海江街,嶽陽路,善化街,榮成路,澳門廣場,武昌路,閩江大廈,臺北路,龍巖街,咸陽廣場,寧德街,龍泉路,麗水街,海川路,彰化大廈,金田路,泰州街,太湖路,江西街,泰興廣場,青大街,金門路,南通大廈,旌德路,匯泉廣場,寧國路,泉州街,如東路,奉化街,鵲山廣場,蓮島大廈,華嚴路,嘉義街,古田路,南平廣場,秀湛路,長汀街,湛山路,徐州大廈,豐縣廣場,汕頭街,新竹路,黃海街,安慶路,基隆廣場,韶關路,雲霄大廈,新安路,仙居街,屏東廣場,曉望街,海門路,珠海街,上杭路,永嘉大廈,漳平路,鹽城街,新浦路,新昌街,高田廣場,市場三街,金鄉東路,市場二大廈,上海支路,李村支廣場,惠民南路,市場緯街,長安南路,陵縣支街,冠縣支廣場,小港一大廈,市場一路,小港二街,清平路,廣東廣場,新疆路,博平街,港通路,小港沿,福建廣場,高唐街,茌平路,港青街,高密路,陽谷廣場,平陰路,夏津大廈,邱縣路,渤海街,恩縣廣場,旅順街,堂邑路,李村街,即墨路,港華大廈,港環路,館陶街,普集路,朝陽街,甘肅廣場,港夏街,港聯路,陵縣大廈,上海路,寶山廣場,武定路,長清街,長安路,惠民街,武城廣場,聊城大廈,海泊路,滄口街,寧波路,膠州廣場,萊州路,招遠街,冠縣路,六碼頭,金鄉廣場,禹城街,臨清路,東阿街,吳淞路,大港沿,遼寧路,棣緯二大廈,大港緯一路,貯水山支街,無棣緯一廣場,大港緯三街,大港緯五路,大港緯四街,大港緯二路,無棣二大廈,吉林支路,大港四街,普集支路,無棣三街,黃臺支廣場,大港三街,無棣一路,貯水山大廈,泰山支路,大港一廣場,無棣四路,大連支街,大港二路,錦州支街,德平廣場,高苑大廈,長山路,樂陵街,臨邑路,嫩江廣場,合江路,大連街,博興路,蒲臺大廈,黃臺廣場,城陽街,臨淄路,安邱街,臨朐路,青城廣場,商河路,熱河大廈,濟陽路,承德街,淄川廣場,遼北街,陽信路,益都街,松江路,流亭大廈,吉林路,恒臺街,包頭路,無棣街,鐵山廣場,錦州街,桓臺路,興安大廈,鄒平路,膠東廣場,章丘路,丹東街,華陽路,青海街,泰山廣場,周村大廈,四平路,臺東西七街,臺東東二路,臺東東七廣場,臺東西二路,東五街,雲門二路,芙蓉山村,延安二廣場,雲門一街,臺東四路,臺東一街,臺東二路,杭州支廣場,內蒙古路,臺東七大廈,臺東六路,廣饒支街,臺東八廣場,臺東三街,四平支路,郭口東街,青海支路,沈陽支大廈,菜市二路,菜市一街,北仲三路,瑞雲街,濱縣廣場,慶祥街,萬壽路,大成大廈,芙蓉路,歷城廣場,大名路,昌平街,平定路,長興街,浦口廣場,諸城大廈,和興路,德盛街,寧海路,威海廣場,東山路,清和街,薑溝路,雒口大廈,松山廣場,長春街,昆明路,順興街,利津路,陽明廣場,人和路,郭口大廈,營口路,昌邑街,孟莊廣場,豐盛街,埕口路,丹陽街,漢口路,洮南大廈,桑梓路,沾化街,山口路,沈陽街,南口廣場,振興街,通化路,福寺大廈,嶧縣路,壽光廣場,曹縣路,昌樂街,道口路,南九水街,臺湛廣場,東光大廈,駝峰路,太平山,標山路,雲溪廣場,太清路" .split(","); private static final String[] email_suffix = "@gmail.com,@yahoo.com,@msn.com,@hotmail.com,@qq.com,@163.com,@outlook.com,@126.com,@sina.com,@sohu.com" .split(","); //返回start到end的隨機數 public static int getNum(int start, int end) { return (int) (Math.random() * (end - start + 1) + start); } //返回電子郵箱 public static String getEmail(int lMin, int lMax) { int length = getNum(lMin, lMax); StringBuffer sb = new StringBuffer(); for (int i = 0; i < length; i++) { int number = (int) (Math.random() * base.length()); sb.append(base.charAt(number)); } sb.append(email_suffix[(int) (Math.random() * email_suffix.length)]); return sb.toString(); } //返回手機號碼 private static String[] telFirst = "180,188,180,137,138,139,150,151,152,157,158,159,130,131,132,155,156,133,153" .split(","); public static String getTel() { int index = getNum(0, telFirst.length - 1); String first = telFirst[index]; String second = String.valueOf(getNum(1, 888) + 10000).substring(1); String thrid = String.valueOf(getNum(1, 9100) + 10000).substring(1); return first + second + thrid; } //返回中文姓名 private static String name_sex = ""; public static String getChineseName() { int index = getNum(0, firstName.length() - 1); String first = firstName.substring(index, index + 1); int sex = getNum(0, 1); String str = boy; int length = boy.length(); if (sex == 0) { str = girl; length = girl.length(); name_sex = "女"; } else { name_sex = "男"; } index = getNum(0, length - 1); String second = str.substring(index, index + 1); int hasThird = getNum(0, 1); String third = ""; if (hasThird == 1) { index = getNum(0, length - 1); third = str.substring(index, index + 1); } return first + second + third; } //返回地址 public static String getAddress() { int index = getNum(0, road.length - 1); String first = road[index]; String second = String.valueOf(getNum(11, 150)) + "號"; String third = "-" + getNum(1, 20) + "-" + getNum(1, 10); return first + second + third; } //數據封裝 public static Map getInfomation() { Map map = new HashMap(); map.put("name", getChineseName()); map.put("sex", name_sex); map.put("address", getAddress()); map.put("tel", getTel()); map.put("email", getEmail(6, 9)); return map; } public static String getUUID() { return java.util.UUID.randomUUID().toString().replaceAll("-", ""); } public static void main(String[] args) { for (int i = 0; i < 1; i++) { // System.out.println(getChineseName()); //中文名 // System.out.println(getTel()); //11位電話 // System.out.println(getEmail(6, 11)); //6到11位的郵箱 // System.out.println(getAddress()); //地址 System.out.println(getUUID()); } } }
以上就是SSM項目實現短信驗證碼登錄功能的示例代碼的詳細內容,更多關於SSM短信驗證碼登錄的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- 聊聊ResourceBundle和properties讀取配置文件的區別
- Java ArrayList中存放引用數據類型的方式
- 一篇文章帶你深入瞭解Java對象與Java類
- Java鬥地主發牌課程設計
- java 三角形類 Triangle的用法詳解