700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > SpringBoot整合Redis 联容云通讯发送短信验证码

SpringBoot整合Redis 联容云通讯发送短信验证码

时间:2021-10-11 01:23:20

相关推荐

SpringBoot整合Redis 联容云通讯发送短信验证码

Redis 第三天

Jedis 操作Redis

​ 首先更改redis配置文件,关闭保护模式,更改127.0.0.1,防火墙开放端口6379,准备工作做完之后开始连接。

​ 在pom.xml中导入Jedis的依赖坐标

<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.2.0</version></dependency>

​ 新建一个JedisDemo01类,创建测试程序。

public static void main(String[] args) {//创建jedis对象String host = "192.168.200.130";int port = 6379;Jedis jedis = new Jedis(host,port);//测试String value = jedis.ping();System.out.println(value);}

看见PONG说明Jedis连接成功

基本使用jedis

@Testpublic void demo01(){String host = "192.168.200.130";int port = 6379;Jedis jedis = new Jedis(host,port);//添加方法jedis.set("name","lucy");//获取String name = jedis.get("name");System.out.println(name);//设置多个key - valuejedis.mset("k1","v1","k2","v2");List<String> mget = jedis.mget("k1", "k2");for (String s : mget) {System.out.println(s);}Set<String> keys = jedis.keys("*");for (String key : keys) {System.out.println(key);}}

Jedis-手机验证码实例

问题分析:1.生成六位随机验证码2.将验证码发送到手机并存入redis中,如果超过三次不能再次发送

本地生成6位随机验证码:使用random()函数

public static String getCode(){Random random = new Random();String code = "";for (int i = 0; i < 6; i++) {int rand = random.nextInt(10);code += rand;}return code;}

将验证码存入redis,并设置约束

public static void verifyCode(String phone , String code){Jedis jedis = new Jedis("192.168.200.130", 6379);//发送次数String countKey = phone + ":count";//发送验证码String codeKey = phone + ":code";String count = jedis.get(countKey);if(count == null) {jedis.setex(countKey,24*60*60,"1");}else if(Integer.valueOf(count) <= 2){//发送次数++jedis.incr(countKey);}else if(Integer.valueOf(count) > 2){System.out.println("每天只能发送三次验证码!");jedis.close();return;}//发送code到redis中jedis.setex(codeKey,120 ,code);jedis.close();}

调用联容云通讯接口测试是否发送成功

public static void msm(String phone , String code){//生产环境请求地址:String serverIp = "";//请求端口String serverPort = "8883";//主账号,登陆云通讯网站后,可在控制台首页看到开发者主账号ACCOUNT SID和主账号令牌AUTH TOKENString accountSId = "";String accountToken = "";//请使用管理控制台中已创建应用的APPIDString appId = "";CCPRestSmsSDK sdk = new CCPRestSmsSDK();sdk.init(serverIp, serverPort);sdk.setAccount(accountSId, accountToken);sdk.setAppId(appId);sdk.setBodyType(BodyType.Type_JSON);String to = phone;String templateId= "1";String[] datas = {code,"2"};HashMap<String, Object> result = sdk.sendTemplateSMS(to,templateId,datas);verifyCode(phone,code);if("000000".equals(result.get("statusCode"))){//正常返回输出data包体信息(map)HashMap<String,Object> data = (HashMap<String, Object>) result.get("data");Set<String> keySet = data.keySet();for(String key:keySet){Object object = data.get(key);System.out.println(key +" = "+object);}}else{//异常返回输出错误码和错误信息System.out.println("错误码=" + result.get("statusCode") +" 错误信息= " + result.get("statusMsg"));}}

使用主函数进行调用

public static void main(String[] args) {String code = getCode();msm("15046923700",code);}

测试结果:

已经成功发送验证码

SpringBoot整合Redis

新建一个SpringBoot工程。

在pom.xml文件中导入项目所需依赖

<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><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>mons</groupId><artifactId>commons-pool2</artifactId></dependency>

配置Redis所需的配置文件application.properties

spring.redis.host=192.168.200.130spring.redis.port=6379spring.redis.database=0spring.redis.timeout=1800000spring.redis.lettuce.pool.max-active=20spring.redis.lettuce.pool.max-wait=-1spring.redis.lettuce.pool.max-idle=5spring.redis.lettuce.pool.min-idle=0

配置Redis的配置类

@EnableCaching@Configurationpublic class RedisConfig extends CachingConfigurerSupport {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();RedisSerializer<String> redisSerializer = new StringRedisSerializer();Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);ObjectMapper om = new ObjectMapper();om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(om);template.setConnectionFactory(factory);//key序列化方式template.setKeySerializer(redisSerializer);//value序列化template.setValueSerializer(jackson2JsonRedisSerializer);//value hashmap序列化template.setHashValueSerializer(jackson2JsonRedisSerializer);return template;}@Beanpublic CacheManager cacheManager(RedisConnectionFactory factory) {RedisSerializer<String> redisSerializer = new StringRedisSerializer();Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);//解决查询缓存转换异常的问题ObjectMapper om = new ObjectMapper();om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(om);// 配置序列化(解决乱码的问题),过期时间600秒RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(600)).serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer)).serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)).disableCachingNullValues();RedisCacheManager cacheManager = RedisCacheManager.builder(factory).cacheDefaults(config).build();return cacheManager;}}

最后编写一个简单的Controller,通过http:localhost:8080/redisTest进行测试。

@RestController@RequestMapping("/redisTest")public class RedisTestController {@Autowiredprivate RedisTemplate redisTemplate;@GetMappingpublic String TestRedis(){//设置值到reids中redisTemplate.opsForValue().set("name","lucy");//从redis获取值String name = (String) redisTemplate.opsForValue().get("name");return name;}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。