当前位置:   article > 正文

springboot如何实现短信验证注册和短信验证码登录_短信登录注册怎么写

短信登录注册怎么写

Spring Boot实现短信验证注册和短信验证码登录的步骤如下:

1. 集成短信服务:选择一个短信服务商,例如阿里云、腾讯云等,并集成该服务商提供的API。

2. 实现短信发送接口:编写一个短信发送的接口,该接口需要传入手机号并发送短信验证码到该手机号,并将验证码存储到Redis等缓存中。

```java

  1. @RequestMapping("/sendSms")
  2. public String sendSms(String mobile) {
  3.     // 生成随机验证码并存入缓存中
  4.     String code = generateCode();
  5.     redisService.set(mobile, code, 300L); // 有效时间5分钟,可根据需求自定义
  6.     // 调用短信服务接口发送验证码到指定手机号
  7.     boolean result = smsService.sendSms(mobile, code);
  8.     if (result) {
  9.         return "发送短信验证码成功";
  10.     } else {
  11.         return "发送短信验证码失败";
  12.     }
  13. }


```

3. 实现短信验证注册接口:编写一个注册接口,该接口需要传入手机号和短信验证码,并将用户信息存储到数据库中。

```java

  1. @RequestMapping("/register")
  2. public String register(String mobile, String code) {
  3.     // 从缓存中取出短信验证码
  4.     String redisCode = redisService.get(mobile);
  5.     // 对比短信验证码,如果相同则注册成功,否则注册失败
  6.     if (code.equals(redisCode)) {
  7.         // 保存用户信息到数据库中
  8.         User user = new User();
  9.         user.setMobile(mobile);
  10.         userRepository.save(user);
  11.         return "注册成功";
  12.     } else {
  13.         return "注册失败,验证码错误";
  14.     }
  15. }


```

4. 实现短信验证码登录接口:编写一个登录接口,该接口需要传入手机号和短信验证码,并根据验证码是否正确来判断用户是否登录成功。

```java

  1. @RequestMapping("/login")
  2. public String login(String mobile, String code) {
  3.     // 从缓存中取出短信验证码
  4.     String redisCode = redisService.get(mobile);
  5.     // 对比短信验证码,如果相同则登录成功,否则登录失败
  6.     if (code.equals(redisCode)) {
  7.         return "登录成功";
  8.     } else {
  9.         return "登录失败,验证码错误";
  10.     }
  11. }


```

以上就是Spring Boot实现短信验证注册和短信验证码登录的基本步骤。当然,具体实现还需要根据实际需求进行相应的调整和完善。

我集成一个阿里云的吧,我用的是springboot和maven

好的,以下是集成阿里云短信服务的具体步骤:

1. 引入阿里云短信服务SDK依赖:

```xml

  1. <dependency>
  2.     <groupId>com.aliyun</groupId>
  3.     <artifactId>aliyun-java-sdk-core</artifactId>
  4.     <version>4.2.2</version>
  5. </dependency>
  6. <dependency>
  7.     <groupId>com.aliyun</groupId>
  8.     <artifactId>aliyun-java-sdk-sms</artifactId>
  9.     <version>1.1.0</version>
  10. </dependency>


```

2. 创建阿里云短信服务所需的AccessKey ID和AccessKey Secret,可以在阿里云官网控制台获取。

3. 配置阿里云短信服务相关参数,包括AccessKey ID、AccessKey Secret、短信签名、短信模板等。在Spring Boot中通常将这些参数放在application.yml或application.properties配置文件中,并通过@ConfigurationProperties注解进行配置。

```yml

  1. aliyun:
  2.   accessKeyId: accessKeyId # 阿里云短信服务AccessKey ID
  3.   accessKeySecret: accessKeySecret # 阿里云短信服务AccessKey Secret
  4.   sms:
  5.     signName: 短信签名 # 阿里云短信签名,需要在官网申请
  6.     templateCode: 验证码模板ID # 阿里云短信模板ID,需要在官网申请
  7.     expireTime: 300 # 短信验证码有效期,单位秒


```

4. 编写发送短信验证码的方法:```java

  1. public interface SmsService {
  2. /**
  3. * 发送短信验证码
  4. * @param mobile 手机号码
  5. * @return 是否发送成功
  6. */
  7. boolean sendSms(String mobile);
  8. }
  1. import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
  2. import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
  3. import com.aliyun.teaopenapi.models.Config;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.stereotype.Service;
  6. @Service
  7. public class SmsServiceImpl implements SmsService {
  8.     @Autowired
  9.     private AliyunSmsConfig aliyunSmsConfig;
  10.     @Override
  11.     public boolean sendSms(String mobile, String code) {
  12.         // 创建短信发送请求对象
  13.         Config config = new Config()
  14.                 .setAccessKeyId(aliyunSmsConfig.getAccessKeyId())
  15.                 .setAccessKeySecret(aliyunSmsConfig.getAccessKeySecret());
  16.         Com.Alibaba.Cloudapi101083.Client client = new Com.Alibaba.Cloudapi101083.Client(config);
  17.         SendSmsRequest request = new SendSmsRequest()
  18.                 .setSignName(aliyunSmsConfig.getSignName()) // 设置短信签名
  19.                 .setTemplateCode(aliyunSmsConfig.getTemplateCode()) // 设置短信模板
  20.                 .setPhoneNumbers(mobile) // 设置接收短信的手机号码
  21.                 .setTemplateParam("{\"code\":\"" + code + "\"}"); // 设置短信模板参数,这里只有一个"code"参数,其值为生成的短信验证码
  22.         // 调用阿里云短信API发送短信
  23.         try {
  24.             SendSmsResponse response = client.sendSms(request);
  25.             if (response.body.getCode().equals("OK")) {
  26.                 return true;
  27.             }
  28.         } catch (Exception e) {
  29.             e.printStackTrace();
  30.         }
  31.         return false;
  32.     }
  33. }

第二种写法

  1. @Service
  2. public class SmsServiceImpl implements SmsService {
  3. @Autowired
  4. private AliyunProperties aliyunProperties;
  5. @Autowired
  6. private RedisTemplate<String, Object> redisTemplate;
  7. private final static String SMS_CODE_PREFIX = "sms:code:";
  8. @Override
  9. public boolean sendSms(String mobile) {
  10. // 生成6位数的随机验证码
  11. String code = String.valueOf((int) ((Math.random() * 9 + 1) * 100000));
  12. try {
  13. // 创建调用Aliyun短信服务所需的环境信息
  14. Config config = new Config()
  15. .setAccessKeyId(aliyunProperties.getAccessKeyId())
  16. .setAccessKeySecret(aliyunProperties.getAccessKeySecret());
  17. // 创建发送短信请求对象
  18. Com.Alibaba.Cloudapi101083.Client client = new Com.Alibaba.Cloudapi101083.Client(config);
  19. SendSmsRequest request = new SendSmsRequest()
  20. .setSignName(aliyunProperties.getSms().getSignName())
  21. .setTemplateCode(aliyunProperties.getSms().getTemplateCode())
  22. .setPhoneNumbers(mobile)
  23. .setTemplateParam("{\"code\":\"" + code + "\"}");
  24. // 调用短信服务发送验证码
  25. SendSmsResponse response = client.sendSms(request);
  26. if (response.body.getCode().equals("OK")) {
  27. // 将验证码存入Redis缓存中
  28. redisTemplate.opsForValue().set(SMS_CODE_PREFIX + mobile, code, aliyunProperties.getSms().getExpireTime(), TimeUnit.SECONDS);
  29. return true;
  30. }
  31. } catch (Exception e) {
  32. e.printStackTrace();
  33. }
  34. return false;
  35. }
  36. }


```

5. 在注册、登录等相关业务逻辑中调用发送短信验证码的方法即可。

这里仅提供阿里云短信服务的集成代码,具体实现还需要根据实际需求进行相应的调整和完善。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/340075
推荐阅读
相关标签
  

闽ICP备14008679号