springboot如何实现短信验证注册和短信验证码登录

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

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

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

```java

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


```

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

```java

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


```

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

```java

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


```

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

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

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

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

```xml

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.2.2</version>
</dependency>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-sms</artifactId>
    <version>1.1.0</version>
</dependency>


```

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

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

```yml

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


```

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

public interface SmsService {

    /**
     * 发送短信验证码
     * @param mobile 手机号码
     * @return 是否发送成功
     */
    boolean sendSms(String mobile);
}
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.teaopenapi.models.Config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class SmsServiceImpl implements SmsService {

    @Autowired
    private AliyunSmsConfig aliyunSmsConfig;

    @Override
    public boolean sendSms(String mobile, String code) {
        // 创建短信发送请求对象
        Config config = new Config()
                .setAccessKeyId(aliyunSmsConfig.getAccessKeyId())
                .setAccessKeySecret(aliyunSmsConfig.getAccessKeySecret());
        Com.Alibaba.Cloudapi101083.Client client = new Com.Alibaba.Cloudapi101083.Client(config);
        SendSmsRequest request = new SendSmsRequest()
                .setSignName(aliyunSmsConfig.getSignName()) // 设置短信签名
                .setTemplateCode(aliyunSmsConfig.getTemplateCode()) // 设置短信模板
                .setPhoneNumbers(mobile) // 设置接收短信的手机号码
                .setTemplateParam("{\"code\":\"" + code + "\"}"); // 设置短信模板参数,这里只有一个"code"参数,其值为生成的短信验证码
        // 调用阿里云短信API发送短信
        try {
            SendSmsResponse response = client.sendSms(request);
            if (response.body.getCode().equals("OK")) {
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
}

第二种写法

@Service
public class SmsServiceImpl implements SmsService {

    @Autowired
    private AliyunProperties aliyunProperties;

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    private final static String SMS_CODE_PREFIX = "sms:code:";

    @Override
    public boolean sendSms(String mobile) {
        // 生成6位数的随机验证码
        String code = String.valueOf((int) ((Math.random() * 9 + 1) * 100000));
        try {
            // 创建调用Aliyun短信服务所需的环境信息
            Config config = new Config()
                    .setAccessKeyId(aliyunProperties.getAccessKeyId())
                    .setAccessKeySecret(aliyunProperties.getAccessKeySecret());
            // 创建发送短信请求对象
            Com.Alibaba.Cloudapi101083.Client client = new Com.Alibaba.Cloudapi101083.Client(config);
            SendSmsRequest request = new SendSmsRequest()
                    .setSignName(aliyunProperties.getSms().getSignName())
                    .setTemplateCode(aliyunProperties.getSms().getTemplateCode())
                    .setPhoneNumbers(mobile)
                    .setTemplateParam("{\"code\":\"" + code + "\"}");
            // 调用短信服务发送验证码
            SendSmsResponse response = client.sendSms(request);
            if (response.body.getCode().equals("OK")) {
                // 将验证码存入Redis缓存中
                redisTemplate.opsForValue().set(SMS_CODE_PREFIX + mobile, code, aliyunProperties.getSms().getExpireTime(), TimeUnit.SECONDS);
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
}


```

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

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

  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值