首先得在阿里云根据流程开通短信服务,申请签名和模版,具体看文档html
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.4.0</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-dysmsapi</artifactId> <version>1.1.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
public class verifyCodeGenerator { // 生成验证码 public static String getVerifyCode() { Random random=new Random(); StringBuffer stringBuffer=new StringBuffer(); for (int i=0;i<6;i++) { stringBuffer.append(String.valueOf(random.nextInt(10))); } System.out.println(stringBuffer.toString()); return stringBuffer.toString(); } }
public class MsUtil { // 发送验证码及返回验证码字符串 public static String send(String mobile) { //设置超时时间-可自行调整 System.setProperty("sun.net.client.defaultConnectTimeout", "10000"); System.setProperty("sun.net.client.defaultReadTimeout", "10000"); //初始化ascClient须要的几个参数 final String product = "Dysmsapi";//短信API产品名称(短信产品名固定,无需修改) final String domain = "dysmsapi.aliyuncs.com";//短信API产品域名(接口地址固定,无需修改) //替换成你的AK final String accessKeyId = "yourAccessKeyId";//你的accessKeyId,参考本文档步骤2 final String accessKeySecret = "yourAccessKeySecret";//你的accessKeySecret,参考本文档步骤2 //初始化ascClient,暂时不支持多region(请勿修改) IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret); try { DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain); } catch (ClientException e) { e.printStackTrace(); } IAcsClient acsClient = new DefaultAcsClient(profile); //组装请求对象 SendSmsRequest request = new SendSmsRequest(); //使用post提交 // request.setMethod(MethodType.POST);//过时了 request.setSysMethod(MethodType.POST); //必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式;发送国际/港澳台消息时,接收号码格式为国际区号+号码,如“85200000000” request.setPhoneNumbers(mobile); //必填:短信签名-可在短信控制台中找到 request.setSignName("小生不才"); //必填:短信模板-可在短信控制台中找到,发送国际/港澳台消息时,请使用国际/港澳台短信模版 request.setTemplateCode("SMS_162732775"); //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为 //友情提示:若是JSON中须要带换行符,请参照标准的JSON协议对换行符的要求,好比短信内容中包含\r\n的状况在JSON中须要表示成\\r\\n,不然会致使JSON在服务端解析失败 String verifyCode=verifyCodeGenerator.getVerifyCode(); request.setTemplateParam("{\"code\":" + verifyCode + "}"); //可选-上行短信扩展码(扩展码字段控制在7位或如下,无特殊需求用户请忽略此字段) //request.setSmsUpExtendCode("90997"); //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者 request.setOutId("yourOutId"); //请求失败这里会抛ClientException异常 try { SendSmsResponse acsResponse = acsClient.getAcsResponse(request); } catch (ClientException e) { e.printStackTrace(); } // if(sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) { // return verifyCode; ////请求成功 // } return verifyCode; } }
#关闭thymeleaf缓存 spring.thymeleaf.cache=false #ָ端口 server.port=8888 #模板的路径 spring.freemarker.template-loader-path=classpath:/templates #设置模板的字符编码 spring.freemarker.charset=utf-8
<!DOCTYPE html> <html lang="en"> <html lang="en" xmlns:th="http://www.w3.org/1999/xhtml"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="matchCode" method="post"> <!--<input type="text" placeholder="请输入手机号码"/>--> <input type="text" placeholder="请输入验证码" name="yourCode"> <input type="submit" value="肯定"> </form> <div th:text="${code}"></div> </body> </html>
<!DOCTYPE html> <html lang="en"> <html lang="en" xmlns:th="http://www.w3.org/1999/xhtml"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div th:text="${result}"></div> </body> </html>
@Controller public class UserController { @Autowired private HttpServletRequest request; //自动注入request @GetMapping(value = "/") public String sign(Model model) { String code= MsUtil.send("你接收验证码的手机号"); // String verifyCode = verifyCodeGenerator.getVerifyCode(); model.addAttribute("code","验证码是"+code); request.getSession().setAttribute("code",code); // attr.addFlashAttribute("code",code); return "sign_in.html"; } //匹配输入的验证码和发送的验证码是否一致 @PostMapping(value = "matchCode") public String matchCode(@RequestParam String yourCode,Model model) { String code =(String) request.getSession().getAttribute("code"); System.out.println("code===="+code); if (yourCode.equals(code)){ System.out.println("成功"); model.addAttribute("result","成功"); }else { System.out.println("失败"); model.addAttribute("result","失败"); } return "test"; } }
参考文档java
我的网站web