Redis 在java中的使用(登录验证,5分钟内连续输错3次密码,锁住帐号,半小时后解封)(三)
在java中使用redis,做简单的登录帐号的验证,使用string类型,使用redis的过期时间功能
1.首先进行redis的jar包的引用,因为用的是springBoot,springBoot集成了redis直接引入即可
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
</dependency>
2.安装redis的jar包的驱动
<dependency>
<groupId>redis.clients</groupId>
<artifactId> jedis</artifactId>
<version>2.9.0</version>
</dependency>
3. 设置过期时间
第一种:
jedis.setex(loginId, 300, "1"); key为loginId,过期时间为300秒,值为"1" 或者
第二种:
jedis.set(loginId,"1")
jedis.expire(loginId,300)
package com.idcos.automate.test.workflow.operation; import org.junit.Test;
import redis.clients.jedis.Jedis; /**
* @author GuanBin
* @version Redis.java, v1 2018/6/20 下午2:47 GuanBin Exp $$
*/ public class RedisTest {
Jedis jedis = new Jedis("127.0.0.1", 6379); @Test
public void testCheckLogin() {
//登录验证时,5分钟内连续输错3次密码,锁住帐号;帐号锁住时间为半个小时,半小时后解封
checkUser("tom", "123");
} private void checkUser(String loginId, String password) {
Boolean exit = jedis.exists(loginId); if (exit == true && ("true".equals(jedis.get(loginId)))) {
System.out.println("该帐号已被锁,请确认");
// throw new CommonBizException("该帐号已被锁,请确认"); } else if (exit == true && "5".equals(jedis.get(loginId))) {
//锁帐号
jedis.set(loginId, "true");
//设置半个小时的过期时间
jedis.expire(loginId, 30 * 60);
} else {
checkNameAndPassword("tom", "123");
}
} private void checkNameAndPassword(String loginId, String password) { if ("tom".equals(loginId) && "123456".equals(password)) {
jedis.del(loginId);
System.out.println("登录成功"); } else {
if (jedis.exists(loginId)) {
jedis.incr(loginId);
} else {
jedis.setex(loginId, 300, "1");
}
System.out.println("第" + jedis.get(loginId) + "登录失败");
} } }


在客户端用ttl命令查看tom这个key还有多长时间解锁

Redis 在java中的使用(登录验证,5分钟内连续输错3次密码,锁住帐号,半小时后解封)(三)的更多相关文章
- Java 自定义注解在登录验证的应用
java注解 从 JDK 5开始,Java 增加了注解的新功能,注解其实是代码里面的特殊标记,这些标记可以在编译.类加载和运行时被读取,在不改变代码原有逻辑下,给源文件嵌入注解信息.再通过返回获取注解 ...
- Redis在java中的使用
1.首先安装Redis环境.可以在Windows.linux.别的服务器上搭建Redis环境 2.在java工程中导入必须的jar包 如maven上导入两个jar] <!-- Redis必须包 ...
- Redis安装 java中的连接 序列化 反序列化
安装路径 /webapp/redis/redis- #启动redis /webapp/redis/redis-/src/redis-server & #关闭redis /webapp/redi ...
- Django-rest_framework中利用jwt登录验证时,自定义返回凭证和登录校验支持手机号
安装 pip install djangorestframework-jwt 在Django.settings中配置 REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATIO ...
- java中部分知识点的验证实现
java中运算符重载 满足以下条件的两个或多个方法构成"重载"关系: (1)方法名相同: (2)参数类型不同,参数个数不同,或者是参数类型的顺序不同. 注意:方法的返回值不作为方法 ...
- 深入理解Java中的同步静态方法和synchronized(class)代码块的类锁
一.回顾学习内容 在前面几篇博客中我我们已经理解了synchronized对象锁.对象锁的重入.synchronized方法块.synchronized非本对象的代码块, 链接:https://www ...
- Java中使用split方法根据英文问号?切割字符串时报错
因为正则表达式的原因,我们无法在java中直接使用String.split("?"),需要先转义其正确写法为: public static void splitStr() { St ...
- Redis】Java中使用Jedis操作Redis(Maven导入包)、创建Redis连接池
如果我们使用Java操作Redis, 需要确保已经安装了 redis 服务及 Java redis 驱动. Maven项目可以直接在pom.xml中加入jedis包驱动: <!-- https: ...
- Redis 在 Java 中的使用
转:http://blog.csdn.net/jiangtao_st/article/details/8256610 一.下载jar包 https://github.com/xetorthio/jed ...
随机推荐
- 3 学习UML图 学习DDD的基本概念
今天在学习DDD的过程中看到了大神 圣杰的博文 个人觉得非常经典 强烈推荐 在此提供url链接: UML类图10分钟快速入门 关于聚合 的理解 :一类没有紧密相关的东西聚在一起 ,分开了也可以独立存 ...
- C# WinForm 文件上传下载
/// <summary> /// WebClient上传文件至服务器 /// </summary> /// <param name="fileNamePath ...
- 简单工厂 vs 工厂方法
设计模式,厂三姐妹是很重要的.现在,让我们来谈谈他们的故事. 简单工厂模式: client的实现须要依靠的是父类和工厂这个类,所以就把子类封装在父类里面,client直接调用父类和工厂类就能够了.可是 ...
- 算法 Tricks(六)—— 判断一个数是否为完全平方数
int(sqrt(n)) * int(sqrt(n)) == n ? 1:0; matlab 下判断一个数是否能开方的判断是: floor(sqrt(m))^2 == m
- Xamarin 设置可接受的版本
一共分三个版本,编译版本.最小版本.目标版本(最适应) 一般编译使用最新的版本,目标版本选择最主流的 参考资料 https://docs.microsoft.com/en-us/xamarin/and ...
- HALCON学习之算子大全
1.1 Gaussian-Mixture-Models 1.add_sample_class_gmm 功能:把一个训练样本添加到一个高斯混合模型的训练数据上. 2.classify_class_gmm ...
- IOS开发之把 Array 和 Dictionaries 序列化成 JSON 对象
1 前言通过 NSJSONSerialization 这个类的 dataWithJSONObject:options:error:方法来实现,Array 和 dictionary 序列化成 JSON ...
- jquery 复选框操作-prop()的使用
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- WP8.1使用HttpClient类
Uri uri = new Uri("http://www.cnsos.net/weburl/index.htm", UriKind.Absolute); HttpClient m ...
- webmethod基本认知
六种控件统称flow step insert/invoke 插入services,类似调用函数 BRANCH 分支结构 参数名在switch定义 子参数以label确定 注意:确保label唯一,否则 ...