这篇文章主要介绍一下手机号注册,发送短信验证码的功能
觉得有帮助的点赞支持一下吧。
这里我们采用的是阿里大于的服务来实现,链接如下:阿里云

界面描述还是比较详细的,展示了短信服务的完整流程快速学习短信发送


我们申请完Access Key IDAccess Key Secret短信签名短信模板就可以入门编写代码了,同时阿里云也提供了相应的接口调用机制和Demo供我们参考,基本条件完成以后接下来就实现注册功能。
首先是验证码发送服务。我们建立springboot项目采用maven导入相关依赖,pom如下:

 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>3.3.1</version></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-dysmsapi</artifactId><version>1.0.0</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId></dependency></dependencies>

resources下建立application.yml文件内容如下:

server:port: #端口号
spring:application:name: #新建模块名称
redis:host: #主机地址
leyou:sms:accessKeyId:  # 你自己的accessKeyIdaccessKeySecret:  # 你自己的AccessKeySecretsignName:  # 签名名称verifyCodeTemplate:  # 模板名称

配置文件完成以后,我们需要建立实体类,监听短信以及发送短信工具类,代码如下:
实体类SmsProperties

@ConfigurationProperties(prefix = "leyou.sms")
public class SmsProperties {String accessKeyId;String accessKeySecret;String signName;String verifyCodeTemplate;//此处省略set和get方法了,实操自行补上

发送短信工具类SmsUtils

@Component
@EnableConfigurationProperties(SmsProperties.class)
public class SmsUtils {@Autowiredprivate SmsProperties prop;//产品名称:云通信短信API产品,开发者无需替换static final String product = "Dysmsapi";//产品域名,开发者无需替换static final String domain = "dysmsapi.aliyuncs.com";static final Logger logger = LoggerFactory.getLogger(SmsUtils.class);public SendSmsResponse sendSms(String phone, String code, String signName, String template) throws ClientException {//可自助调整超时时间System.setProperty("sun.net.client.defaultConnectTimeout", "10000");System.setProperty("sun.net.client.defaultReadTimeout", "10000");//初始化acsClient,暂不支持region化IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou",prop.getAccessKeyId(), prop.getAccessKeySecret());DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);IAcsClient acsClient = new DefaultAcsClient(profile);//组装请求对象-具体描述见控制台-文档部分内容SendSmsRequest request = new SendSmsRequest();request.setMethod(MethodType.POST);//必填:待发送手机号request.setPhoneNumbers(phone);//必填:短信签名-可在短信控制台中找到request.setSignName(signName);//必填:短信模板-可在短信控制台中找到request.setTemplateCode(template);//可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为request.setTemplateParam("{\"code\":\"" + code + "\"}");//选填-上行短信扩展码(无特殊需求用户请忽略此字段)//request.setSmsUpExtendCode("90997");//可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者request.setOutId("123456");//hint 此处可能会抛出异常,注意catchSendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);logger.info("发送短信状态:{}", sendSmsResponse.getCode());logger.info("发送短信消息:{}", sendSmsResponse.getMessage());return sendSmsResponse;}
}
此处代码和阿里云短信服务提供的demo基本一致。

监听类SmsListener

@Component
@EnableConfigurationProperties(SmsProperties.class)
public class SmsListener {@Autowiredprivate SmsUtils smsUtils;@Autowiredprivate SmsProperties smsProperties;public void sendSms(Map<String,String> msg) throws ClientException {if (CollectionUtils.isEmpty(msg)){return;}String phone = msg.get("phone");String code = msg.get("code");if (StringUtils.isNoneBlank(phone) && StringUtils.isNoneBlank(code)){this.smsUtils.sendSms(phone,code,this.smsProperties.getSignName(),this.smsProperties.getVerifyCodeTemplate());}}此处接收验证码并发送

至此短信服务模块就构建好了,接下来我们实现验证码的产生及手机号注册。同样我们建立一个新模块作为注册功能。这里我们采用通用mapper实现增删改查,同时利用redis的过期机制来保存验证码,代码如下:
实体类User:

@Table(name = "tb_user")
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Length(min = 4, max = 30, message = "用户名只能在4~30位之间")private String username;// 用户名@JsonIgnore //对象序列化为json字符串时忽略该属性@Length(min = 4, max = 30, message = "密码只能在4~30位之间")private String password;// 密码@Pattern(regexp = "^1[35678]\\d{9}$", message = "手机号格式不正确")private String phone;// 电话private Date created;// 创建时间@JsonIgnoreprivate String salt;// 密码的盐值此处省略set和get方法

Controller层:

//发送验证码@PostMapping("code")public ResponseEntity<Void> sendVerifyCode(@RequestParam("phone")String phone){this.userService.sendVerifyCode(phone);return ResponseEntity.status(HttpStatus.CREATED).build();}//注册@PostMapping("register")public ResponseEntity<Void> register(@Valid User user, @RequestParam("code")String code){this.userService.register(user,code);return ResponseEntity.status(HttpStatus.CREATED).build();}

Service层:

 public void sendVerifyCode(String phone) {//采用工具类生成验证码String code = NumberUtils.generateCode(6);if(StringUtils.isBlank(phone)){return;}//保存验证码到redis中this.redisTemplate.opsForValue().set(phone,code,5, TimeUnit.MINUTES);}public void register(User user, String code) {//查询redis中验证码String redisCode =  this.redisTemplate.opsForValue().get(user.getPhone());//1.校验验证码if(!code.equals(redisCode)){return;}//2.生成盐String salt = CodecUtils.generateSalt();//3.加盐加密user.setSalt(salt);String password = CodecUtils.md5Hex(user.getPassword(),salt);user.setPassword(password);//4.新增用户(设置用户id和时间)user.setId(null);user.setCreated(new Date());this.userMapper.insertSelective(user);}

通用mapper接口

public interface UserMapper extends Mapper<User> {}

整个发送验证码注册流程大致如此了。

java实现阿里大于短信发送服务相关推荐

  1. JAVA对接阿里大于短信验证

    本文介绍的是JAVA的阿里大于短信验证对接,网上好多版本都是旧版本,我自己写完之后觉得应该更新一下,现在记录一下,怕以后忘记,申请步骤忽略 首先,去阿里大于下载SDK 第一步,就是安装阿里大于的SDK ...

  2. 阿里大于短信发送调用

    阿里大于使用文档 Sdk 所需sdk文件:taobao-sdk-java-auto_1455552377940-20160607.jar 下载地址:https://www.alidayu.com/ce ...

  3. Java实现阿里云短信云服务

    1.前提 此文章主要介绍 短信服务 的入门,可根据实际业务需求自行编写代码,写的简陋之处请见谅  想实现 阿里云短信服务,必须的有 阿里云的账号,此处文章前的你们是不是 有备而来?点击下方注册 OR ...

  4. JAVA 实现阿里云短信发送功能

    目录 1.引入依赖 2.添加.yml配置 3.短信接口开发 4.接口调用 1.引入依赖 引入阿里云短信依赖jar包 <!--阿里云服务sdk --> <dependency>& ...

  5. 阿里大于短信——发送手机验证码

    使用阿里大于的短信服务需要先去开通相应服务,具体过程:https://www.jb51.net/article/171902.htm,https://www.cnblogs.com/shubs/p/1 ...

  6. egg.js 调用阿里云(阿里大于)短信验证码服务

    1.开通阿里云短信服务 阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台 可以免费申请 企业短信验证码 200条 重点是: 签名名称:接收验证码内容时,[]里的文字. 短信模板code:相当于 ...

  7. Java实现阿里云短信发送功能(保姆级!!!搞懂短信功能,这一篇就够了!)

    目录 一.准备工作 1)功能如何切入? 2)为什么要用阿里云来实现? 二.阿里云部分 三.代码部分 OK,分享结束!收! 一.准备工作 1)功能如何切入? 第一步:分析业务需求,想要实现短信通知功能那 ...

  8. Java 阿里大于短信功能

    最近做了阿里大于短信的功能,记录一下 创建应用,并记录下应用的KeyId 及 KeySecret 下载sdk 准备完毕,直接上代码 随便弄个  controller @ApiOperation(&qu ...

  9. JAVA 实现阿里云短信申请模板以及批量发送短信

    添加pom.xml依赖 <dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java ...

最新文章

  1. arm-none-linux-gnueabi,安装交叉编译器arm-none-linux-gnueabi-gcc 过程
  2. 如何找到文件的家-打开文件对话框openFileDialog
  3. java类向拦截器传值_MyBatis拦截器:给参数对象属性赋值的实例
  4. Android Studio开发基础之启动Service,并通过从Activity向Service传递数据
  5. docker 启动mysql root用户_Docker-Compose搭建Wordpress博客系统
  6. Hurdles of 110m ZOJ - 2972 (简单DP)
  7. sqlite使用手册
  8. python编程课件_Python面向对象程序设计ppt课件.ppt
  9. 服务器部署Nodejs api 接口
  10. SQL 数据库 学习 012 数据库关系图
  11. MFC弹出确认和取消对话框
  12. 速学TypeScript-精简划重点手册-上册
  13. Promise 与 RXJS的区别
  14. Linux下Mysql 5.7的安装及远程连接配置
  15. 在origin中画一条Y=x的自定义函数曲线
  16. c语言CFile的使用方法,C/C++文件操作之CFile
  17. 阿里云服务器详细地址在哪里?华南1深圳服务器详细地址
  18. ubuntu查看网卡驱动
  19. 【JS】BOM 详解(工作必备)
  20. Java项目:停车位租赁系统(java+SSM+JSP+Maven+mysql)

热门文章

  1. 电商精细化运营的五大关键指标和三个关键思路——笔记
  2. iptables nat及端口映射 【转】
  3. esp32 smtp发送邮件micropython
  4. Ubuntu16.04 打不开文件夹解决办法 | killall nautilus的原理 |nautilus命令快速打开文件
  5. BootLoader(U-Boot)启动过程记录
  6. 加价出票成机票ssjj网站潜规则
  7. 如何在wampserver添加多个本地网站
  8. php 鲜为人知的函数
  9. pool win10提示bad_Win10系统电脑蓝屏提示bad pool header怎么办
  10. 在c++11中讨论nullptr和NULL