使用EHCACHE实现账号密码登录校验失败5次锁定10分钟

<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<diskStore path="java.io.tmpdir"/> <defaultCache
maxElementsInMemory="10000"
eternal="false"
overflowToDisk="false"
timeToIdleSeconds="10"
timeToLiveSeconds="20"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"/> <cache name="cache"
maxEntriesLocalHeap="2000"
eternal="false"
timeToIdleSeconds="3600"
timeToLiveSeconds="0"
overflowToDisk="false"
statistics="true">
</cache> <cache name="limitRetryCache"
maxEntriesLocalHeap="5000"
eternal="false"
timeToIdleSeconds="600"   <!--缓存创建后未被访问销毁时间-->
timeToLiveSeconds="3600" <!--缓存从创建到销毁时间-->
overflowToDisk="false"
statistics="false">
</cache> </ehcache>

Spring 配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--ehcache-->
<bean id="ehcacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:ehcache.xml"/>
</bean> <bean id="shiroCacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
<property name="cacheManager" ref="ehcacheManager"/>
</bean> <bean id="retryLimitMatcher" class="com.haier.basic.cache.RetryLimitMatcher">
<constructor-arg ref="shiroCacheManager"/>
</bean> </beans>
package com.haier.basic.cache;

import org.apache.shiro.cache.Cache;
import org.apache.shiro.cache.CacheManager; import java.util.concurrent.atomic.AtomicInteger; /**
* Created by liujianji on 2017/6/1.
*/
public class RetryLimitMatcher{
private Cache<String, AtomicInteger> passwordRetryCache; public RetryLimitMatcher(CacheManager cacheManager) {
passwordRetryCache = cacheManager.getCache("limitRetryCache");
} public void doLimitMatch(String userTel) {
AtomicInteger retryCount = passwordRetryCache.get(userTel);
if(retryCount == null) {
retryCount = new AtomicInteger(0);
passwordRetryCache.put(userTel, retryCount);
}
retryCount.incrementAndGet();
passwordRetryCache.put(userTel,retryCount);
} public boolean isLocked(String userTel){
AtomicInteger num = passwordRetryCache.get(userTel);
if(null != num && num.intValue() > 4){
return true;
}
return false;
} public int getRetaryNum(String userTel){
AtomicInteger num = passwordRetryCache.get(userTel);
if(null == num){
return 5;
}
return 5 - num.intValue();
} public void removeRetary(String userTel){
passwordRetryCache.remove(userTel);
}
}

  

EHCACHE实现登录错误次数账号锁定的更多相关文章

  1. asp.net限制用户登录错误次数

    很经常在登录一个网站的时候看到,如果你登录的时候输入的账号密码错误超过三次就被锁定,然后等一段时间才能继续登录,最最经常使用的就是银行系统啦~~ 该功能处理流程如下: string uid = Req ...

  2. Redis限制在规定时间范围内登陆错误次数限制

    在博客里之前有过一篇文章是 <PHP结合Redis来限制用户或者IP某个时间段内访问的次数>,这篇文章的思路也是一样的.看下代码吧 //登录错误次数校验 $key = "logi ...

  3. vmware vcenter orchestrator configuration提示“用户名密码错误或登录失败超过次数被锁定”

    首次登录,使用默认用户密码登录vmware/vmware vmware vcenter orchestrator configuration提示"用户名密码错误或登录失败超过次数被锁定&qu ...

  4. django 实现登录时候输入密码错误5次锁定用户十分钟

    在学习django的时候,想要实现登录失败后,进行用户锁定,切记录锁定时间,在网上找了很多资料,但是都感觉不是那么靠谱, 于是乎,我开始了我的设计,其实我一开始想要借助redis呢,但是想要先开发一个 ...

  5. php 实现密码错误三次锁定账号10分钟

    /** * 登录 * 1.接收数据 * 2.正则判断接收到的数据是否合理 * 3.根据用户名获取用户数据 * 获取到数据 -> 继续执行 * 没有获取到数据 -> 提示:用户名密码错误 * ...

  6. DiscuzX2.5密码错误次数过多,请 15 分钟后重新登录的修改办法

    source\function function_login.php $return = (!$login || (TIMESTAMP - $login['lastupdate'] > )) ? ...

  7. 通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数--菜单功能'menufile

      通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁 ...

  8. 通过游戏学python 3.6 第一季 第八章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数

    通过游戏学python 3.6 第一季 第八章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账 ...

  9. oldboy-作业01.登录多次进行账号锁定

    """可以支持多个用户登录 (提示,通过列表存多个账户信息)用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态(提示:需把用户锁定的状态存到文件里) &q ...

随机推荐

  1. C语言环境总结

    1.虚拟内存下C语言环境 2.main函数调用 3.栈调用 每次函数调用,在栈中分配一个栈帧,寄存器通过持有该栈帧的基地址,并上下偏移,访问形参和本地变量, C语言形参为一个字大小,所以通常传指针,这 ...

  2. 从头学起Verilog(一):组合逻辑基础与回顾

    引言 该部分主要回顾了本科时数字电路中组合逻辑电路部分,内容相对简单和基础. 内容主要包括:布尔代数相关知识,卡诺图,最大项与最小项,竞争和冒险以及一些常见模块 数字电路中的逻辑 组合逻辑:输出可以表 ...

  3. 02、MyBatis XML 全局配置文件

    MyBatis-全局配置文件 在MyBatis中全局配置文件有着重要的地位,里面有9类行为信息;如果我们要想将MyBatis运用的熟练,配置全局配置文件是必不可少的步骤,所以我们一定要啃下这一块硬骨头 ...

  4. centos 6系统下新磁盘分区(MBR格式)

    添加新磁盘后,fdisk -l查看所有磁盘列表( fdisk只能分区2T以下磁盘,超过2T的用parted命令来进行GPT分区) 然后fdisk -cu /dev/sdb选择要分区的磁盘,按m显示菜单 ...

  5. Hadoop框架:MapReduce基本原理和入门案例

    本文源码:GitHub·点这里 || GitEE·点这里 一.MapReduce概述 1.基本概念 Hadoop核心组件之一:分布式计算的方案MapReduce,是一种编程模型,用于大规模数据集的并行 ...

  6. Single Depth peeling 顺序无关渲染(OIT)

    什么是顺序无关渲染 在3D渲染中,物体的渲染是按一定的顺序渲染的,这也就可能导致半透明的物体先于不透明的物体渲染,结果就是可能出现半透明物体后的物体由于深度遮挡而没有渲染出来.对于这种情况通常会先渲染 ...

  7. 巧妙利用Camtasia制作网课

    随着互联网的快速发展,网络学习变得非常流行.这种躺在床上就可以获取知识的方法让大家渐渐地都喜欢上了学习,那么我们是否想要了解一下网课的幕后制作呢. 今天我给大家带来的便是巧妙利用Camtasia进行网 ...

  8. ECS服务器快速迁移

    ECS服务器快速迁移 前提 一.停机 二.创建镜像 三.复制镜像 前提 服务器都在同一个区域,举例:华南1(深圳) 同一个账号 具体迁移步骤如下: 一.停机 先从阿里云ECS控制台,将要迁移的两台EC ...

  9. Spring事务传播级别

    项目中用的默认值: 具体的,转载:https://segmentfault.com/a/1190000013341344 注: DataSourceTransactionManager只支持单数据源

  10. 【佛山市选2013】JZOJ2020年8月7日T4 排列

    [佛山市选2013]JZOJ2020年8月7日T4 排列 题目 描述 一个关于n个元素的排列是指一个从{1, 2, -, n}到{1, 2, -, n}的一一映射的函数.这个排列p的秩是指最小的k,使 ...