尝试登录次数控制实现
实现原理
Realm在验证用户身份的时候,要进行密码匹配。最简单的情况就是明文直接匹配,然后就是加密匹配,这里的匹配工作则就是交给CredentialsMatcher来完成的。我们在这里继承这个接口,自定义一个密码匹配器,缓存入键值对用户名以及匹配次数,若通过密码匹配,则删除该键值对,若不匹配则匹配次数自增。超过给定的次数限制则抛出错误。这里缓存用的是ehcache。
shiro-ehcache配置
maven依赖
1 | <dependency> |
ehcache配置
1 |
|
#RetryLimitCredentialsMatcher
1 | /** |
Shiro配置修改
注入CredentialsMatcher
1 | /** |
realm添加认证器
1 | myShiroRealm.setCredentialsMatcher(retryLimitCredentialsMatcher()); |
并发在线人数控制实现
KickoutSessionControlFilter
1 | /** |
ehcache配置
ehcache-shiro.xml加入1
2
3
4
5
6
7
8
9<!-- 用户队列缓存10分钟 -->
<cache name="shiro-kickout-session"
maxEntriesLocalHeap="2000"
eternal="false"
timeToIdleSeconds="3600"
timeToLiveSeconds="0"
overflowToDisk="false"
statistics="true">
</cache>
shiro配置
ShiroConfig.java中注入相关对象
1 | /** |
shiro过滤链中加入并发登录人数过滤器
1 | filterChainDefinitionMap.put("/**", "kickout,user"); |
访问任意链接均需要认证通过以及限制并发登录次数