服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Redis - Redis实现短信验证码登录的示例代码

Redis实现短信验证码登录的示例代码

2022-10-21 16:27步尔斯特 Redis

本文主要介绍了基于Redis如何实现短信验证码登录功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

效果图

发送验证码

Redis实现短信验证码登录的示例代码

输入手机号、密码以及验证码完成登录操作

Redis实现短信验证码登录的示例代码

 

pom.xml

核心依赖

<dependencies>
    <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>5.7.22</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-pool2</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.47</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.2.2</version>
    </dependency>
</dependencies>

 

applicatoin.yml

server:
  port: 8080

spring:
  application:
    name: redis-lettuce
  datasource:
    url: jdbc:mysql://aliyun-rds.mysql.rds.aliyuncs.com/illness?useSSL=false
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
    # useSSL : 一般通过证书或者令牌进行安全认证,否则通过账号和密码进行连接
  redis:
    database: 0  #Redis索引0~15,默认为0
    host: ip
    port: 6379
    password: 123456 #密码(默认为空)
    lettuce: # 这里标明使用lettuce配置
      pool:
        max-active: 8   #连接池最大连接数(使用负值表示没有限制)
        max-wait: -1ms  #连接池最大阻塞等待时间(使用负值表示没有限制)
        max-idle: 5     #连接池中的最大空闲连接
        min-idle: 0     #连接池中的最小空闲连接
    timeout: 10000ms    #连接超时时间(毫秒)

 

Redis配置类

/**
 * Redis配置类
 *
 * @author issavior
 */
@Configuration
public class RedisConf {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {


        // 创建Template
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        // 设置连接工厂
        redisTemplate.setConnectionFactory(redisConnectionFactory);

        // 设置序列化工具
        GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();

        // key和 hashKey采用 string序列化
        redisTemplate.setKeySerializer(RedisSerializer.string());
        redisTemplate.setHashKeySerializer(RedisSerializer.string());

        // value和 hashValue采用 JSON序列化
        redisTemplate.setValueSerializer(jsonRedisSerializer);
        redisTemplate.setHashValueSerializer(jsonRedisSerializer);

        return redisTemplate;
    }
}

 

controller

/**
 * @author issavior
 */
@RestController
@RequestMapping("/user")
public class UserController {

    /**
     * userService
     */
    @Autowired
    private UserService userService;

    /**
     * 登录
     *
     * @param issa issa
     * @return ResponseEntity<Issa>
     */
    @PostMapping("/login")
    public ResponseEntity<Object> login(@RequestBody Issa issa) {

        return userService.login(issa);

    }

    /**
     * 获取验证码
     *
     * @param phone phone
     * @return ResponseEntity<Object>
     */
    @GetMapping("/{phone}")
    public ResponseEntity<Object> verificationCode(@PathVariable String phone) {

        return ResponseEntity.ok(userService.verificationCode(phone));
    }


    /**
     * 注册
     *
     * @param issa issa
     * @return ResponseEntity<Object>
     */
    @PostMapping
    public ResponseEntity<Object> register(@RequestBody Issa issa) {

        issa.setId(UUID.randomUUID().toString(true));

        return userService.register(issa);

    }

 

serviceImpl

/**
 * @author issavior
 */
@Service
@Slf4j
public class UserServiceImpl implements UserService {

    /**
     * redisTemplate
     */
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    /**
     * userMapper
     */
    @Autowired
    private UserMapper userMapper;

    /**
     * 登录
     *
     * @param issa 登录的参数
     * @return ResponseEntity<Object>
     */
    @Override
    public ResponseEntity<Object> login(Issa issa) {

        Issa user = userMapper.getUser(issa);

        if (user == null) {
            return ResponseEntity.status(400).body("手机号或密码错误");
        }

        String phone = issa.getPhone();

        String verificationCode = (String) redisTemplate.opsForValue().get("login:" + phone);

        String verifyCode = issa.getVerifyCode();
        if (!Objects.equals(verifyCode, verificationCode)) {
            return ResponseEntity.status(400).body("请输入正确的验证码");
        }

        return ResponseEntity.ok("登录成功");
    }

    /**
     * 注册
     *
     * @param issa 注册的参数
     * @return ResponseEntity<Object>
     */
    @Override
    public ResponseEntity<Object> register(Issa issa) {

        int user = userMapper.insertUser(issa);

        if (user != 1) {
            return ResponseEntity.status(400).body("注册失败");
        }

        return ResponseEntity.ok("注册成功");
    }

    /**
     * 获取验证码
     *
     * @param phone 手机号
     * @return Object
     */
    @Override
    public Object verificationCode(String phone) {

        String randomCode = RandomUtil.randomNumbers(6);

        redisTemplate.opsForValue().set("login:" + phone, randomCode);
        log.info("验证码已经存入进redis服务器中:" + randomCode);

        String code = (String) redisTemplate.opsForValue().get("login:" + phone);
        if (code == null) {
            return "验证码获取失败";
        }

        return "验证码获取成功【 " + code + " 】";


    }
}

 

mapper

/**
 * @author issavior
 */
public interface UserMapper {

    /**
     * 新增用户&注册
     *
     * @param issa 参数
     * @return int:新增成功返回1,否则返回0
     */
    @Insert("insert into issa(id,user_name,password,nick_name,sex,age,phone) values (#{id},#{userName},#{password},#{nickName},#{sex},#{age},#{phone})")
    int insertUser(Issa issa);

    /**
     * 用于登录时,根据手机号和密码判断是否有相关用户
     *
     * @param issa issa
     * @return int
     */
    @Select("select * from issa where phone = #{phone} and password = #{password}")
    Issa getUser(Issa issa);
}

以上就是Redis实现短信验证码登录的示例代码的详细内容,更多关于Redis短信验证码登录的资料请关注服务器之家其它相关文章!

原文地址:https://issavior.blog.csdn.net/article/details/125067531

延伸 · 阅读

精彩推荐
  • RedisRedis 哨兵集群的实现

    Redis 哨兵集群的实现

    Sentinel是Redis 的高可用性解决方案,本文详细的介绍了redis哨兵集群的实现,非常具有实用价值,需要的朋友可以参考下...

    jaycekong8342021-08-10
  • Redis分布式架构Redis中有哪些数据结构及底层实现原理

    分布式架构Redis中有哪些数据结构及底层实现原理

    这篇文章主要为大家介绍了分布式架构Redis中有哪些数据结构及底层的实现原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步...

    Q.E.D8362022-03-10
  • Redis浅谈Redis 中的过期删除策略和内存淘汰机制

    浅谈Redis 中的过期删除策略和内存淘汰机制

    本文主要介绍了Redis 中的过期删除策略和内存淘汰机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友...

    ZhanLi3672022-10-13
  • RedisRedis教程(十四):内存优化介绍

    Redis教程(十四):内存优化介绍

    这篇文章主要介绍了Redis教程(十四):内存优化介绍,本文讲解了特殊编码、BIT和Byte级别的操作、尽可能使用Hash等内容,需要的朋友可以参考下 ...

    Redis教程网5142019-10-24
  • RedisRedis安装图文教程(Windows和Linux)

    Redis安装图文教程(Windows和Linux)

    这篇文章主要介绍了Redis安装教程(Windows和Linux),本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...

    吾仄lo咚锵4002022-03-01
  • Redis基于Redis实现分布式锁以及任务队列

    基于Redis实现分布式锁以及任务队列

    这篇文章主要介绍了基于Redis实现分布式锁以及任务队列,需要的朋友可以参考下 ...

    __kelly_3372019-10-27
  • Redisredis快照模式_动力节点Java学院整理

    redis快照模式_动力节点Java学院整理

    这篇文章主要为大家详细介绍了redis快照模式的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 ...

    huangxincheng3642019-11-07
  • Redisredis中的事务操作案例分析

    redis中的事务操作案例分析

    这篇文章主要介绍了redis中的事务操作案例,结合具体实例形式详细分析了redis事务操作的概念、原理、使用技巧与相关注意事项,需要的朋友可以参考下 ...

    webbc2242019-11-26