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


Posted in Redis onJune 14, 2022

效果图

发送验证码

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短信验证码登录的资料请关注三水点靠木其它相关文章!


Tags in this post...

Redis 相关文章推荐
Redis IP地址的绑定的实现
May 08 Redis
使用Redis实现秒杀功能的简单方法
May 08 Redis
压缩Redis里的字符串大对象操作
Jun 23 Redis
浅谈Redis中的RDB快照
Jun 29 Redis
Redis集群新增、删除节点以及动态增加内存的方法
Sep 04 Redis
关于SpringBoot 使用 Redis 分布式锁解决并发问题
Nov 17 Redis
redis调用二维码时的不断刷新排查分析
Apr 01 Redis
redis复制有可能碰到的问题汇总
Apr 03 Redis
Redis中key的过期删除策略和内存淘汰机制
Apr 12 Redis
Redis实现订单过期删除的方法步骤
Jun 05 Redis
Redis实现分布式锁的五种方法详解
Jun 14 Redis
浅谈Redis变慢的原因及排查方法
Jun 21 Redis
Redis批量生成数据的实现
Jun 05 #Redis
Redis实现订单过期删除的方法步骤
Jun 05 #Redis
浅谈Redis缓冲区机制
Redis全局ID生成器的实现
Jun 05 #Redis
Redis keys命令的具体使用
Jun 05 #Redis
Redis入门基础常用操作命令整理
Jun 01 #Redis
Redis基本数据类型String常用操作命令
Jun 01 #Redis
You might like
全文搜索和替换
2006/10/09 PHP
PHP+MySQL删除操作实例
2015/01/21 PHP
php实现的mysqldb读写分离操作类示例
2017/02/07 PHP
原生php实现excel文件读写的方法分析
2018/04/25 PHP
用JavaScript显示随机图像或引用
2009/04/21 Javascript
DOM2非标准但却支持很好的几个属性小结
2012/01/21 Javascript
理解JavaScript的prototype属性
2012/02/11 Javascript
js 剪切板应用clipboardData详细解析
2013/12/17 Javascript
纯JS前端实现分页代码
2016/06/21 Javascript
AngularJS过滤器filter用法实例分析
2016/11/04 Javascript
js实现下一页页码效果
2017/03/07 Javascript
JS字符串false转boolean的方法(推荐)
2017/03/08 Javascript
jquery实现简单实用的轮播器
2017/05/23 jQuery
深入浅出理解JavaScript闭包的功能与用法
2018/08/01 Javascript
解决vue组件props传值对象获取不到的问题
2019/06/06 Javascript
vue实现直播间点赞飘心效果的示例代码
2019/09/20 Javascript
python文件操作之目录遍历实例分析
2015/05/20 Python
遍历python字典几种方法总结(推荐)
2016/09/11 Python
Python中使用多进程来实现并行处理的方法小结
2017/08/09 Python
python使用xpath中遇到:到底是什么?
2018/01/04 Python
Python设计模式之中介模式简单示例
2018/01/09 Python
python自动发邮件总结及实例说明【推荐】
2019/05/31 Python
Python 3 实现定义跨模块的全局变量和使用教程
2019/07/07 Python
django页面跳转问题及注意事项
2019/07/18 Python
学Python 3的理由和必要性
2019/11/19 Python
Python3+Appium安装及Appium模拟微信登录方法详解
2021/02/16 Python
Html5中的桌面通知Notification的实现
2018/09/25 HTML / CSS
波兰最大的儿童服装连锁店之一:5.10.15.
2018/02/11 全球购物
亿企通软件测试面试题
2012/04/10 面试题
安全生产检查通报
2014/01/29 职场文书
怎么写自荐书范文
2014/02/12 职场文书
北京奥运会主题口号
2014/06/13 职场文书
关于教师节的广播稿
2014/09/10 职场文书
医院反腐倡廉演讲稿
2014/09/16 职场文书
自我推荐信格式模板
2015/03/24 职场文书
python基础之文件操作
2021/10/24 Python