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五大数据结构和使用场景
Apr 12 Redis
使用Redis实现秒杀功能的简单方法
May 08 Redis
redis实现排行榜功能
May 24 Redis
Windows下redis下载、redis安装及使用教程
Jun 02 Redis
聊一聊Redis与MySQL双写一致性如何保证
Jun 26 Redis
Redis集群的关闭与重启操作
Jul 07 Redis
分布式Redis Cluster集群搭建与Redis基本用法
Feb 24 Redis
面试分析分布式架构Redis热点key大Value解决方案
Mar 13 Redis
Redis 的查询很快的原因解析及Redis 如何保证查询的高效
Mar 16 Redis
Redis监控工具RedisInsight安装与使用
Mar 21 Redis
解决 redis 无法远程连接
May 15 Redis
Redis特殊数据类型bitmap位图
Jun 01 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
hadoop中一些常用的命令介绍
2013/06/19 PHP
php限制文件下载速度的代码
2015/10/20 PHP
laravel unique验证、确认密码confirmed验证以及密码修改验证的方法
2019/10/16 PHP
基于Laravel 多个中间件的执行顺序详解
2019/10/21 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
setTimeout和setInterval的浏览器兼容性分析
2007/02/27 Javascript
根据出生日期自动取得星座的js代码
2010/07/20 Javascript
突发奇想的一个jquery插件
2010/11/19 Javascript
Javascript 中 null、NaN和undefined的区别总结
2013/04/10 Javascript
JavaScript转换与解析JSON方法实例详解
2015/11/24 Javascript
简单对比分析JavaScript中的apply,call与this的使用
2015/12/04 Javascript
js 数字、字符串、布尔值的转换方法(必看)
2017/04/07 Javascript
微信小程序 判断手机号的实现代码
2017/04/19 Javascript
详解Vue使用命令行搭建单页面应用
2017/05/24 Javascript
Angular2 之 路由与导航详细介绍
2017/05/26 Javascript
vue项目上传Github预览的实现示例
2018/11/06 Javascript
Vue 幸运大转盘实现思路详解
2019/05/06 Javascript
小程序使用watch监听数据变化的方法详解
2019/09/20 Javascript
微信小程序input抖动问题的修复方法
2021/03/03 Javascript
python中for语句简单遍历数据的方法
2015/05/07 Python
举例讲解Python编程中对线程锁的使用
2016/07/12 Python
python如何通过实例方法名字调用方法
2018/03/21 Python
Python 统计字数的思路详解
2018/05/08 Python
Python使用Numpy模块读取文件并绘制图片
2020/05/13 Python
HTML5通用接口详解
2016/06/12 HTML / CSS
伦敦最有品味的百货:Liberty London
2016/11/12 全球购物
阿迪达斯法国官方网站:adidas法国
2018/03/20 全球购物
意大利中国电子产品购物网站:Geekmall.com
2019/09/30 全球购物
财务信息服务专业自荐书范文
2014/02/08 职场文书
优秀教师先进事迹材料
2014/12/15 职场文书
2015年世界环境日活动总结
2015/02/11 职场文书
如何写辞职书
2015/02/26 职场文书
清洁工个人工作总结
2015/03/05 职场文书
2015年电话销售工作总结范文
2015/04/20 职场文书
学习弘扬焦裕禄精神心得体会
2016/01/23 职场文书
python中数组和列表的简单实例
2022/03/25 Python