在Java中怎么用redis实现短信验证码的登录
时间: 2024-05-13 13:19:21 浏览: 86
如何使用Java redis实现发送手机验证码功能
在Java中使用Redis实现短信验证码的登录,可以按照以下步骤进行:
1. 引入Redis依赖
在pom.xml中添加Redis依赖:
```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
```
2. 配置Redis连接信息
在application.properties中配置Redis连接信息:
```
# Redis
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=
```
3. 编写短信验证码生成和存储逻辑
可以定义一个工具类,如下所示:
```
@Component
public class SmsCodeUtil {
@Autowired
private RedisTemplate<String, String> redisTemplate;
// 生成短信验证码
public String generateSmsCode() {
Random random = new Random();
return String.valueOf(100000 + random.nextInt(900000));
}
// 存储短信验证码
public void saveSmsCode(String mobile, String code) {
String key = "sms_code:" + mobile;
redisTemplate.opsForValue().set(key, code, 5, TimeUnit.MINUTES);
}
// 校验短信验证码
public boolean checkSmsCode(String mobile, String code) {
String key = "sms_code:" + mobile;
String value = redisTemplate.opsForValue().get(key);
if (value != null && value.equals(code)) {
redisTemplate.delete(key);
return true;
}
return false;
}
}
```
其中,generateSmsCode方法用于生成6位随机数作为短信验证码,saveSmsCode方法用于将手机号和验证码存入Redis中,并设置过期时间为5分钟,checkSmsCode方法用于校验短信验证码是否正确。
4. 编写发送短信验证码的逻辑
可以调用短信服务商的API来发送短信验证码,也可以使用模拟数据来测试。以下是一个示例代码:
```
@RestController
public class SmsController {
@Autowired
private SmsCodeUtil smsCodeUtil;
@PostMapping("/sms/send")
public String sendSms(@RequestParam String mobile) {
String code = smsCodeUtil.generateSmsCode();
smsCodeUtil.saveSmsCode(mobile, code);
return "短信验证码已发送至" + mobile;
}
@PostMapping("/login")
public String login(@RequestParam String mobile, @RequestParam String code) {
if (smsCodeUtil.checkSmsCode(mobile, code)) {
return "登录成功";
} else {
return "验证码不正确";
}
}
}
```
其中,sendSms方法用于发送短信验证码,并将验证码存入Redis中,login方法用于校验短信验证码是否正确。
阅读全文