- 浏览: 3420413 次
- 性别:
- 来自: 珠海
文章分类
- 全部博客 (1633)
- Java (250)
- Android&HTML5 (111)
- Struts (10)
- Spring (236)
- Hibernate&MyBatis (115)
- SSH (49)
- jQuery插件收集 (55)
- Javascript (145)
- PHP (77)
- REST&WebService (18)
- BIRT (27)
- .NET (7)
- Database (105)
- 设计模式 (16)
- 自动化和测试 (19)
- Maven&Ant (43)
- 工作流 (36)
- 开源应用 (156)
- 其他 (16)
- 前台&美工 (119)
- 工作积累 (0)
- OS&Docker (83)
- Python&爬虫 (28)
- 工具软件 (157)
- 问题收集 (61)
- OFbiz (6)
- noSQL (12)
最新评论
-
HEZR曾嶸:
你好博主,这个不是很理解,能解释一下嘛//左边+1,上边+1, ...
java 两字符串相似度计算算法 -
天使建站:
写得不错,可以看这里,和这里的这篇文章一起看,有 ...
jquery 遍历对象、数组、集合 -
xue88ming:
很有用,谢谢
@PathVariable映射出现错误: Name for argument type -
jnjeC:
厉害,困扰了我很久
MyBatis排序时使用order by 动态参数时需要注意,用$而不是# -
TopLongMan:
非常好,很实用啊。。
PostgreSQL递归查询实现树状结构查询
http://blog.csdn.net/cloud_ll/article/details/44124189
之前讲了Shiro Security如何结合验证码,这次讲讲如何限制用户登录尝试次数,防止多次尝试,暴力破解密码情况出现。要限制用户登录尝试次数,必然要对用户名密码验证失败做记录,Shiro中用户名密码的验证交给了CredentialsMatcher
所以在CredentialsMatcher里面检查,记录登录次数是最简单的做法。Shiro天生和Ehcache是一对好搭档,无论是单机还是集群,都可以在Ehcache中存储登录尝试次数信息。
现在介绍一个简单的登录次数验证做法,实现一个RetryLimitCredentialsMatchers继承至HashedCredentialsMatcher,加入缓存,在每次验证用户名密码之前先验证用户名尝试次数,如果超过5次就抛出尝试过多异常,否则验证用户名密码,验证成功把尝试次数清零,不成功则直接退出。这里依靠Ehcache自带的timeToIdleSeconds来保证锁定时间(帐号锁定之后的最后一次尝试间隔timeToIdleSeconds秒之后自动清除)。
Spring配置CacheManager
Ehcache配置
Spring Shiro配置
UserRealm继承AuthorizingRealm,在其父类AuthenticatingRealm的getAuthenticationInfo方法中会调用credentialsMatcher的
doCredentialsMatch
来验证用户输入用户名密码是否匹配。
之前讲了Shiro Security如何结合验证码,这次讲讲如何限制用户登录尝试次数,防止多次尝试,暴力破解密码情况出现。要限制用户登录尝试次数,必然要对用户名密码验证失败做记录,Shiro中用户名密码的验证交给了CredentialsMatcher
所以在CredentialsMatcher里面检查,记录登录次数是最简单的做法。Shiro天生和Ehcache是一对好搭档,无论是单机还是集群,都可以在Ehcache中存储登录尝试次数信息。
现在介绍一个简单的登录次数验证做法,实现一个RetryLimitCredentialsMatchers继承至HashedCredentialsMatcher,加入缓存,在每次验证用户名密码之前先验证用户名尝试次数,如果超过5次就抛出尝试过多异常,否则验证用户名密码,验证成功把尝试次数清零,不成功则直接退出。这里依靠Ehcache自带的timeToIdleSeconds来保证锁定时间(帐号锁定之后的最后一次尝试间隔timeToIdleSeconds秒之后自动清除)。
public class RetryLimitCredentialsMatcher extends HashedCredentialsMatcher { //集群中可能会导致出现验证多过5次的现象,因为AtomicInteger只能保证单节点并发 private Cache<String, AtomicInteger> passwordRetryCache; public RetryLimitHashedCredentialsMatcher(CacheManager cacheManager) { passwordRetryCache = cacheManager.getCache("passwordRetryCache"); } @Override public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) { String username = (String)token.getPrincipal(); //retry count + 1 AtomicInteger retryCount = passwordRetryCache.get(username); if(null == retryCount) { retryCount = new AtomicInteger(0); passwordRetryCache.put(username, retryCount); } if(retryCount.incrementAndGet() > 5) { logger.warn("username: " + username + " tried to login more than 5 times in period"); throw new ExcessiveAttemptsException("username: " + username + " tried to login more than 5 times in period" ); } boolean matches = super.doCredentialsMatch(token, info); if(matches) { //clear retry data passwordRetryCache.remove(username); } return matches; } }
Spring配置CacheManager
<bean id="springCacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"> <property name="cacheManager" ref="ehcacheManager"/> </bean> <!--ehcache--> <bean id="ehcacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"> <property name="configLocation" value="classpath:ehcache/ehcache.xml"/> </bean>
Ehcache配置
<ehcache name="es"> <diskStore path="java.io.tmpdir"/> <!-- 登录记录缓存 锁定100分钟 --> <cache name="passwordRetryCache" maxEntriesLocalHeap="20000" eternal="false" timeToIdleSeconds="36000" timeToLiveSeconds="0" overflowToDisk="false" statistics="false"> </cache> </ehcache>
Spring Shiro配置
UserRealm继承AuthorizingRealm,在其父类AuthenticatingRealm的getAuthenticationInfo方法中会调用credentialsMatcher的
doCredentialsMatch
来验证用户输入用户名密码是否匹配。
<bean id="credentialsMatcher" class="com.cloud.service.security.credentials.RetryLimitCredentialsMatcher"> <constructor-arg ref="springCacheManager"/> <property name="storedCredentialsHexEncoded" value="true"/> </bean> <bean id="myRealm" class="com.cloud.service.security.UserRealm"> <property name="credentialsMatcher" ref="credentialsMatcher"/> <property name="cachingEnabled" value="false"/> <!--<property name="authenticationCachingEnabled" value="true"/>--> <!--<property name="authenticationCacheName" value="authenticationCache"/>--> <!--<property name="authorizationCachingEnabled" value="true"/>--> <!--<property name="authorizationCacheName" value="authorizationCache"/>--> </bean>
发表评论
-
分布式存储系统GlusterFS安装配置
2016-06-27 14:51 1029http://navyaijm.blog.51cto.com/ ... -
分布式查询 presto 入门安装使用
2016-06-24 15:44 2501http://my.oschina.net/chengxiao ... -
Spring Boot 属性配置
2016-06-24 11:04 1179Spring Boot 属性配置和使用 http://blog ... -
Spring Boot 集成MyBatis
2016-06-24 10:55 2024Spring Boot 集成MyBatis http://bl ... -
Spring MVC防重复提交
2016-06-17 15:47 1643http://my.oschina.net/zyqjustin ... -
Spring容器加载完之后执行特定任务
2016-06-17 15:36 2281http://my.oschina.net/simpleton ... -
跟我学习dubbo
2016-06-17 15:20 1065跟我学习dubbo-目录 http://bluereader. ... -
JavaMelody监控web服务器
2016-06-17 14:20 1177JavaMelody监控web服务器 http://my.os ... -
使用spring-session和shiro来代理session的配置
2016-06-16 11:21 12055使用spring-session和redis来代理sessio ... -
JSTL 的 if else : 有 c:if 没有 else 的处理
2016-06-14 09:52 1332http://blog.csdn.net/xiyuan1999 ... -
spring mvc 请求转发和重定向
2016-06-14 09:48 1396http://blog.csdn.net/jackpk/art ... -
freemarker使用记录
2016-06-08 16:24 1308freeMarker语法 http://uule.iteye. ... -
freemarker判断是否为空
2016-06-08 16:03 2http://www.oschina.net/code/sni ... -
ehcache 分布式支持
2016-06-05 22:26 1097原文 http://my.oschina.net/glenxu ... -
Intellij IDEA插件开发入门
2016-05-26 11:42 2881原文: http://blog.csdn.net/dc_726 ... -
阿里巴巴Druid数据源的配置与使用
2016-05-24 17:42 1541http://my.oschina.net/wjme/blog ... -
mvc:view-controller
2016-05-18 10:26 1080http://blog.csdn.net/lzwglory/a ... -
spring配置事物的方式:注解和aop配置
2016-05-14 00:26 4101参考: Spring AOP中pointcut express ... -
分布式任务调度组件 Uncode-Schedule
2016-05-13 14:47 2286http://www.oschina.net/p/uncode ... -
Mybatis分库分表扩展插件
2016-05-12 15:47 1620http://fangjialong.iteye.com/bl ...
相关推荐
主要介绍了springboot整合shiro-登录失败次数限制功能,实现此功能如果是防止坏人多次尝试,破解密码的情况,所以要限制用户登录尝试次数,需要的朋友可以参考下
Shiro 框架提供了自定义的登录失败次数限制机制,开发者可以根据需要自定义登录失败次数限制规则。 在本示例中,我们使用 Shiro 框架来实现登录失败次数限制,并使用 SpringBoot 框架来实现密码加密。我们首先使用 ...
shiro-登录尝试次数限制
shiro+redis 实现登录控制及密码重试次数超过5次后账号锁定一分钟不能登录
在"shiro管理多登录入口配置,手机端登录与网页端登录"这个场景下,我们需要考虑如何为不同的登录入口(手机端和网页端)设置独立的验证流程。 首先,Shiro 的核心组件 Realm 负责与应用数据源交互,验证用户身份。...
SpringBoot整合Shiro后实现免密登录 1,说明一下步骤,需要在原来基础新增三个文件 2,新增CustomToken,重写UsernamePasswordToken免密登录调用方法和密码登录调用方法都在里面。 3,新增...
Springboot+shiro单点登录实现,本文档是单点登录的全部源代码。
实现了shiro安全登录,包括密码加密匹配和登录失败次数限制的功能
通过以上步骤,我们便能成功地利用Spring、Shiro、Spring Data Redis和Spring Session Data Redis实现单点登录功能。这个解决方案不仅提供了便捷的用户体验,还降低了系统复杂性,提高了安全性。在实际开发中,可以...
在IT安全领域,Apache Shiro和Spring Security是两个非常重要的框架,它们主要用于应用程序的安全管理,包括身份验证、授权、会话管理和加密等。本学习文档集合了这两个框架的相关知识,旨在帮助开发者深入理解和...
5. **登录与登出流程**:当用户尝试访问受保护的资源时,如果未登录,会被重定向到CAS登录页面。成功登录后,CAS会返回一个票据给客户端,客户端再将此票据提交给Shiro进行验证。验证通过后,用户即可访问受保护资源...
通常我们会创建一个Controller接收用户提交的登录信息,然后调用Subject的login方法进行登录尝试。如果登录成功,Subject会自动记住用户身份;失败时,Shiro会抛出异常,我们可以捕获这个异常并给出相应的提示。 3....
### Shiro 获取登录状态与用户信息 在Java Web开发领域,Apache Shiro 是一个非常流行的权限管理框架。它提供了一套完整的认证、授权、加密和会话管理功能。本篇文章将详细介绍如何通过Shiro框架来获取用户的登录...
总结起来,这个项目将SpringBoot的便捷性与Shiro的安全控制和Redis的高速缓存相结合,实现了高效的SSO单点登录,同时提供了统一的异常处理和日志管理机制,提高了系统的稳定性和用户体验。这是一套完整的解决方案,...
1. **用户登录**:用户尝试访问任一系统,如果未登录,则重定向至登录页面。 2. **认证过程**:用户提交登录信息,Shiro进行验证,成功后创建会话并存储用户信息。 3. **会话存储**:Shiro将会话信息(包括用户ID、...
在"shiro-单用户登录.zip"这个压缩包中,我们很显然是关注Shiro如何实现单用户的登录逻辑。Shiro 提供了丰富的API和组件,使得开发者能够快速集成到自己的应用中,实现用户的身份验证和授权。 1. **Shiro基础概念**...
在"shiro控制使用跳转链接前必须登录"的场景下,Shiro通常会在用户尝试访问受保护资源时进行拦截。如果用户未登录,Shiro会将请求重定向到登录页面。实现这一功能的关键在于配置Shiro的Web过滤器。在`web.xml`中,...
Java SSM(Spring、Spring MVC、MyBatis)与Apache Shiro框架的结合使用,是构建Web应用中用户登录权限认证的一种常见方案。本实例demo将深入探讨如何利用这两个强大的工具来实现安全、高效的用户身份验证和授权。 ...