现在很多应用都用到短信验证。这篇博客主要记录下短信验证码存入redis,实现用户登录,算是个人笔记!
短信验证代码 就不多说了,这里用的阿里的短信SDK,简单修改就可以使用了!
首先是在服务器上安装redis,服务器设置redis端口号,然后使用图形化连接服务器上的redis(你也可以直接操作服务器)
这里连接肯可能出现连接不上、连接错误等问题,百度一下 很多博客都会说到,就是防火墙设置和修改配置文件redis-conf
你也可以试试以下操作(以下摘自其他博客)
1、先检查防火墙的状态
通过systemctl status firewalld查看firewalld状态,发现当前是dead状态,即防火墙未开启
通过systemctl start firewalld开启防火墙,没有任何提示即开启成功。
【再次通过systemctl status firewalld查看firewalld状态,显示running即已开启了。
如果要关闭防火墙设置,可能通过systemctl stop firewalld这条指令来关闭该功能。】
2、开放6379端口
命令:firewall-cmd --permanent --add-port=6379/tcp
执行可以成功,返回success
用该命令查询firewall-cmd --permanent --query-port=6379/tcp
3、开放端口的配置要添加在:vi /etc/sysconfig/iptables-config 文末就可以了;
添加的内容:-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT
4、ip的配置问题
5、关闭防火墙
如何连接成功,那恭喜你啦,如果还是不行的话,度娘 嘿嘿(总会有答案的)
接下来就是Java操作redis了,Redis开发商提供了一个Java版本支持 Jedis类,它可以获得java和redis的连接。
1、导入依赖 --如果你是maven项目
在依赖中加入以下依赖(这里是2.8.0版本)
redis.clients
jedis
2.8.0
2、如果不是maven项目,则就要去下载jar包了,我这里附上下载链接吧
http://central.maven.org/maven2/redis/clients/jedis/2.8.0/
这里jedis还需要一个依赖包,commons-pool2,不然jedis里面的config不能用的哦(坑已踩过)
下面Jedis代码
properties文件:
redis.host = 127.0.0.1
redis.port = 6379
redis.MaxTotal = 10
redis.MaxIdle = 10
redis.MinIdle = 10
static JedisPool jedisPool ;
static Jedis jedis= null;
static {
//转换为流的方式
InputStream inputStream = JedisPoolUtil.class.getClassLoader().getResourceAsStream("redisDB.properties");
Properties properties = new Properties();
try {
properties.load(inputStream);//加载流文件
} catch (IOException e) {
e.printStackTrace();
System.out.println("读取配置文件失败");
}
String host = properties.getProperty("redis.host");
Integer port = Integer.parseInt(properties.getProperty("redis.port"));
Integer MaxTotal = Integer.parseInt(properties.getProperty("redis.MaxTotal"));
Integer MaxIdle = Integer.parseInt(properties.getProperty("redis.MaxIdle"));
Integer MinIdle = Integer.parseInt(properties.getProperty("redis.MinIdle"));
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(10);
jedisPoolConfig.setMaxIdle(MaxIdle);
jedisPoolConfig.setMinIdle(MinIdle);
jedisPool = new JedisPool(jedisPoolConfig,host,port);
}
public static Jedis getJedis(){
jedis = jedisPool.getResource();
jedis.auth("root");
return jedis;
}
public static void release(Jedis jedis){
if (jedis != null){
jedis.close();
}
}
发送验证码,将验证码存入redis,并设置有效时间(这里设置为五分钟)
smsResponse = SMSCodeUtils.sendSms(phoneNum, smsCode);
json2.setCode(200);
json2.setMsg("验证码已发送");
// 登录的验证码存入redis
jedis.set(phoneNum+"login", smsCode);
// 设置key的有效期五分钟
// NX是不存在时才set, XX是存在时才set, EX是秒,PX是毫秒
jedis.set(phoneNum+"login",smsCode,"XX","EX",300);
上面两个set可以合为一条,XX改为NX。就可以了,亲测可行!
第一次搞,简单的配置一下,欢迎大佬留言