SpringBoot发送短信验证码的实例

网友投稿 272 2022-10-29

SpringBoot发送短信验证码的实例

目录1、注册短信通账号2、导入依赖3、随机验证码的工具类4、短信发送工具类5、测试

1、注册短信通账号

网址:http://sms.webchinese.cn

2、导入依赖

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-security

org.thymeleaf

thymeleaf-spring5

org.thymeleaf.extras

thymeleaf-extras-java8time

org.thymeleaf.extras

thymeleaf-extras-springsecurity5

commons-logging

commons-logging

1.1.1

commons-codec

commons-codec

1.4

commons-httpclient

commons-httpclient

3.0.1

3、随机验证码的工具类

public class CodeUtil {

@Bean

public PasswordEncoder passwordEncoder(){

return new BCryptPasswordEncoder();

}

/**

* 随机生成6位验证码

*

*/

public String getRandomCode(Integer code){

Random random = new Random();

StringBuffer result= new StringBuffer();

for (int i=0;i

result.append(random.nextInt(10));

}

return result.toString();

}

//保存验证码和时间

public IHjGyVCode 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分钟后时间,用户校验是否过期

//验证码加密

String encode=passwordEncoder().encode(code);

code1.setCode(encode);

code1.setCurrentTime(currentTime);

return code1;

}

/**

* 解密处理

* @param code 输入

* @param code1 目标

*/

public Boolean deciphering(String code,String code1){

boolean matches = passwordEncoder().matches(code,code1);

return matches;

}

}

4、短信发送工具类

@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 短信发送目标号码

* @param desc 短信内容

* @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");// 在头文件中设置转码

//设置参数

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 没有该用户账户

-2 接口密钥不正确 [查看密钥]不是账户登陆密码

-21 MD5接口密钥加密不正确

-3 短信数量不足

-11 该用户被禁用

-14 短信内容出现非法字符

-4 手机号格式不正确

-41 手机号码为空

-42 短信内容为空

-51 短信签名格式不正确接口签名格式为:【签名内容】

-6 IP限制

大于0 短信发送数量

以上作为补充

*/

public static String getMessage(Integer code){

String message;

if(code > 0 ) {

message = "SMS-f发送成功!短信量还有" + code + "条";

}else if(code == -1){

message = "SMS-没有该用户账户";

}else if(code == -2){

message = "SMS-接口密钥不正确";

}else if(code == -21){

message = "SMS-MD5接口密钥加密不正确";

}else if(code == -3){

message = "SMS-短信数量不足";

}else if(code == -11){

message = "SMS-该用户被禁用";

}else if(code == -14){

message = "SMS-短信内容出现非法字符";

}else if(code == -4){

message = "SMS-手机号格式不正确";

}else if(code == -41){

message = "SMS-手机号码为空";

}else if(code == -42){

message = "SMS-短信内容为空";

}else if(code == -51){

message = "SMS-短信签名格式不正确接口签名格式为:【签名内容】";

}else if(code == -6){

message = "SMS-IP限制";

}else{

message = "其他错误";

}

return message;

}

}

5、测试

//前台验证手机号

@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","没有此用户,请注册!");

return "register";

}else {

model.addAttribute("info","已向你的手机号为"+tel+"发送了验证码");

Long id = loginService.findIdByTel(tel);

session.setAttribute("user_id",id);

//发送验证码

CodeUtil codeUtil=new CodeUtil();

//获取六位验证码

String randomCode = codeUtil.getRandomCode(6);

//先清除session域

session.removeAttribute("checkCode");

//加密验证码存放session域中

session.setAttribute("checkCode",codeUtil.passwordEncoder().encode(randomCode));

Integer resultCode = TelMessageUtil.send("****","************",tel,

"【高校志愿者平台】你的验证码为【"+randomCode+"】(若不是本人操作,可忽略该条邮件)"

);

System.out.println("日志信息"+resultCode);

return "updatePwd";

}

}

result.append(random.nextInt(10));

}

return result.toString();

}

//保存验证码和时间

public IHjGyVCode 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分钟后时间,用户校验是否过期

//验证码加密

String encode=passwordEncoder().encode(code);

code1.setCode(encode);

code1.setCurrentTime(currentTime);

return code1;

}

/**

* 解密处理

* @param code 输入

* @param code1 目标

*/

public Boolean deciphering(String code,String code1){

boolean matches = passwordEncoder().matches(code,code1);

return matches;

}

}

4、短信发送工具类

@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 短信发送目标号码

* @param desc 短信内容

* @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");// 在头文件中设置转码

//设置参数

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 没有该用户账户

-2 接口密钥不正确 [查看密钥]不是账户登陆密码

-21 MD5接口密钥加密不正确

-3 短信数量不足

-11 该用户被禁用

-14 短信内容出现非法字符

-4 手机号格式不正确

-41 手机号码为空

-42 短信内容为空

-51 短信签名格式不正确接口签名格式为:【签名内容】

-6 IP限制

大于0 短信发送数量

以上作为补充

*/

public static String getMessage(Integer code){

String message;

if(code > 0 ) {

message = "SMS-f发送成功!短信量还有" + code + "条";

}else if(code == -1){

message = "SMS-没有该用户账户";

}else if(code == -2){

message = "SMS-接口密钥不正确";

}else if(code == -21){

message = "SMS-MD5接口密钥加密不正确";

}else if(code == -3){

message = "SMS-短信数量不足";

}else if(code == -11){

message = "SMS-该用户被禁用";

}else if(code == -14){

message = "SMS-短信内容出现非法字符";

}else if(code == -4){

message = "SMS-手机号格式不正确";

}else if(code == -41){

message = "SMS-手机号码为空";

}else if(code == -42){

message = "SMS-短信内容为空";

}else if(code == -51){

message = "SMS-短信签名格式不正确接口签名格式为:【签名内容】";

}else if(code == -6){

message = "SMS-IP限制";

}else{

message = "其他错误";

}

return message;

}

}

5、测试

//前台验证手机号

@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","没有此用户,请注册!");

return "register";

}else {

model.addAttribute("info","已向你的手机号为"+tel+"发送了验证码");

Long id = loginService.findIdByTel(tel);

session.setAttribute("user_id",id);

//发送验证码

CodeUtil codeUtil=new CodeUtil();

//获取六位验证码

String randomCode = codeUtil.getRandomCode(6);

//先清除session域

session.removeAttribute("checkCode");

//加密验证码存放session域中

session.setAttribute("checkCode",codeUtil.passwordEncoder().encode(randomCode));

Integer resultCode = TelMessageUtil.send("****","************",tel,

"【高校志愿者平台】你的验证码为【"+randomCode+"】(若不是本人操作,可忽略该条邮件)"

);

System.out.println("日志信息"+resultCode);

return "updatePwd";

}

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:QDR SRAM与Spartan3 FPGA的接口设计
下一篇:k8s交付heapster,启动pod失败,发现是harbor仓库问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~