1、实现原理
保证原子性:
单系统:AtomicLong计数
集群系统:RedissionClient提供的RAtomicLong计数
1、获取系统中是否已有登录次数缓存,缓存对象结构预期为:"用户名--登录次数"。
2、如果之前没有登录缓存,则创建一个登录次数缓存。
3、如果缓存次数已经超过限制,则驳回本次登录请求。
4、将缓存记录的登录次数加1,设置指定时间内有效
5、验证用户本次输入的帐号密码,如果登录登录成功,则清除掉登录次数的缓存
思路有了,那我们在哪里实现呢?我们知道AuthenticatingRealm里有比较密码的入口doCredentialsMatch方法
查看其实现
2、自定义密码比较器
新建项目shiro-day01-14shiro-RetryLimit
【1】RetryLimitCredentialsMatcher
package com.newbies.shiro.core.impl;
import com.newbies.shiro.core.base.ShiroUser;
import org.apache.shiro.authc.AuthenticationInfo;
import org.ap