Shiro security限制登录尝试次数

Spring Boot中Shiro与OAuth2集成实战:微信与GitHub第三方登录 OAuth2作为一种授权框架,其核心原理是允许应用在用户不提供密码的情况下,安全地获取其在第三方服务上的资源或身份信息。这一机制在现代Web应用中具有重要技术价值,是实现单点登录和第三方身份认证的基础。在Java生态中,Apache Shiro作为一个经典的安全框架,专注于应用内部的认证、授权和会话管理。将OAuth2与Shiro结合,能够构建既安全又灵活的身份认证与授权体系,尤其适用于需要集成微信、GitHub等第三方登录的Spring Boot应用。本文通过实战案例,详细解析了如何利用Spring Se 阅读详情

之前讲了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; 
    }
}
  1. 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>
  1. 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>
  1. 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>
若依框架Shiro动态密钥改造:告别固定密钥安全风险 在Java企业级应用开发中,Apache Shiro作为主流的安全框架,其RememberMe功能通过Cookie实现用户持久化登录,核心依赖于AES对称加密算法。该机制的原理是使用固定密钥对用户身份信息进行加密存储,但固定密钥一旦泄露或使用默认值,会引发反序列化漏洞,导致远程代码执行(RCE)等严重安全风险。从技术价值看,动态密钥方案通过定期轮换加密密钥,能有效缩短攻击窗口期,大幅提升系统整体安全性。这一机制特别适用于后台管理系统、Web应用等需要平衡安全与用户体验的场景。本文以若依(RuoYi)框架为例 阅读详情

相关推荐

Apache Shiro CVE-2020-13933身份验证绕过漏洞原理与复现

身份验证是Web应用安全的核心机制,它确保只有合法用户才能访问受保护的资源。其原理通常基于过滤器链或拦截器,对请求路径进行模式匹配,从而决定是否执行认证逻辑。在Java生态中,Apache Shiro作为广泛使用的安全框架,提供了简洁的权限控制配置。然而,框架实现中的路径匹配逻辑缺陷可能导致严重的安全漏洞,例如身份验证绕过,使得攻击者无需凭证即可访问后台接口,直接威胁业务安全。CVE-2020-13933正是这样一个典型案例,它源于Shiro的Ant风格路径匹配器在处理含分号的请求时存在逻辑缺陷,结合Ser

weixin_30266885的博客 794

shiro学习分享(二)——登陆次数限制,RemberMe功能以及验证码功能实现

实现登陆次数限制,RemberMe功能以及验证码功能的整合 登陆次数限制 实现:通过重写HashedCredentialsMatcher这个类实现,并且使用Ehcache管理内存 实现类: public class RetryLimitHashedCredentialsMatcher extends HashedCredentialsMatcher { private Ca...

madonghyu的博客 925

若依框架Shiro RememberMe默认密钥安全风险与动态密钥改造实战

在Java Web应用安全领域,会话管理是身份验证的核心环节。Shiro框架的RememberMe功能通过Cookie实现持久化登录,其原理是将用户信息序列化后使用AES加密存储。然而,这一机制的技术价值高度依赖于密钥的安全性,若使用硬编码的默认密钥,会形成严重的安全短板,使系统暴露在伪造会话和反序列化攻击的风险之下。在实际应用场景中,许多基于若依(RuoYi)等流行开源框架构建的管理系统,正是由于忽视了默认密钥的更换,导致了广泛的安全隐患。本文聚焦于**反序列化攻击**的防御和**密钥管理**的工程实践,

425

shiro源码分析篇3:用户登录缓存登录信息

上篇讲了shiro是如何过滤请求链接,判断用户是否已经登录。这篇就是讲解shiro用户登录时,如何把登录信息缓存起来,下次用户登录其他需要登录的链接时,如何判断已经登录了。RetryLimitHashedCredentialsMatcher自定义的登录凭据,也就是登录的处理方案public class RetryLimitHashedCredentialsMatcher extends Hashed

samll leaf 3305

Apache Shiro CVE-2020-1957认证绕过漏洞:原理、复现与修复

在Web应用安全领域,认证与授权是保障系统安全的核心机制,其实现依赖于安全框架对请求路径的精确解析与匹配。Apache Shiro作为Java生态中广泛使用的安全框架,通过Ant风格路径模式定义访问控制规则。然而,当Shiro与Spring MVC协同工作时,两者对URL路径的解析逻辑差异可能引发严重的安全问题。具体而言,Shiro的路径匹配器在处理包含分号的路径时可能出现偏差,而Spring MVC默认会截断分号后的内容用于支持矩阵变量。这种解析不一致性导致了认证绕过漏洞,攻击者可构造特殊路径(如`/se

weixin_30788619的博客 349

若依(RuoYi)后台登录的那些‘坑’:弱口令、Session泄露与前端逻辑缺陷

本文深入分析了若依(RuoYi)后台登录系统的安全风险,包括默认凭证泄露、会话管理缺陷和前端逻辑漏洞等关键问题。针对这些漏洞,提供了详细的防御方案,如修改默认密码、强化会话管理和修复前端缺陷,帮助开发者提升系统安全性。

GBin1中文互联 698

第十六节 Shiro限制密码重试次数限制

一、基本思路 不管是单机还是集群,我们都得把用户的登录次数记录下来,放到缓存里面。 单机使用的是Ehcache缓存,集群使用的是Redis缓存。单机或集群对于缓存来说,只是CacheManager接口的实现方式不同。 我们可以按照如下的思路来限制登录次数: 先查看是否系统中是否已有登录次数缓存。缓存对象结构预期为:"用户名-...

大宇的博客,欢迎访问 5329

Nginx、Spring、Shiro等中间件高危漏洞原理与实战防御指南

在分布式系统与微服务架构中,中间件和框架构成了技术栈的核心基础,其安全性直接关系到整个系统的稳定与数据安全。从原理层面看,漏洞通常源于配置错误、设计缺陷或实现瑕疵,例如反序列化机制、路径解析逻辑或加密模式的选择。这些底层安全问题一旦被利用,可导致远程代码执行、敏感信息泄露或权限提升等严重后果,其技术价值在于理解攻击链与防御点的对应关系。在应用场景上,无论是作为流量入口的Nginx/Apache Web服务器,还是承载业务逻辑的Spring、Shiro应用框架,或是Fastjson等基础组件,都需建立纵深防御

weixin_34161029的博客 359

springboot整合shiro大全

springboot整合shiro大全 1、权限控制的两种方式:粗粒度基于URL级别权限控制、细粒度基于方法级别权限控制 2、基于Apache Shiro实现登录认证和权限控制,重点讲解shiro权限控制流程、自定义Realm对象控制系统认证和授...

qq_41362717的博客 841

Spring Boot、Shiro、SSTI框架漏洞实战:从原理到横向移动

在软件开发领域,框架是提升效率的基石,如Spring Boot、Apache Shiro及各类模板引擎。其核心原理在于通过预置组件和约定,简化通用功能的开发。然而,当框架自身存在安全缺陷时,其广泛部署的特性会将风险急剧放大,形成影响深远的通用攻击面。这类漏洞的技术价值在于,攻击者无需针对每个定制应用,掌握针对框架的通用攻击手法即可实现批量突破,极大提升了攻击效率。典型的应用场景包括未授权访问、反序列化漏洞和服务器端模板注入(SSTI)。例如,Spring Boot Actuator的配置不当可导致敏感信息泄

liudaoru - 悟 471

SpringBoot整合Shiro后实现免密登录

SpringBoot整合Shiro后实现免密登录 1,说明一下步骤,需要在原来基础新增三个文件 2,新增CustomToken,重写UsernamePasswordToken免密登录调用方法和密码登录调用方法都在里面。 3,新增MyRetryLimitCredentialsMatcher,重写HashedCredentialsMatcher,主要是判定登录是否是免密登录。 4,新增LoginType,登录类型枚举 5,修改ShiroConfig文件,即Shiro配置文件,主要关注:57,63,65-90行 原文链接:https://blog.youkuaiyun.com/zlxls/article/details/105455375

springboot整合shiro-登录失败次数限制

防止多次尝试,恶意暴力破解密码的情况出现,要限制用户登录尝试次数,必然要对用户名密码验证失败做记录,Shiro中用户名密码的验证交给了CredentialsMatcher 所以在CredentialsMatcher里面检查,记录登录次数是最简单的做法。当登录失败次数达到限制,修改数据库中的状态字段,并返回前台错误信息。 RetryLimitHashedCredentialsMatcher配置:...

weixin_39654286的博客 7232

从EXIF到测绘:解码大疆影像元数据的实战应用指南

本文深入解析了大疆无人机影像元数据的实战价值,重点阐述了如何利用EXIF和XMP中的GPS、RTK、姿态角及相机内参等关键信息,提升测绘、三维重建及精准农业等项目的成果精度与效率。通过自动化质检脚本与行业应用场景剖析,指导从业者将元数据从信息转化为生产力,实现从拍照到专业测绘的跨越。

dell8的博客 526

SpringMVC+Shiro的基本使用

一.介绍 Apache Shiro是Java的一个安全框架。目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Security做的功能强大,但是在实际工作时可能并不需要那么复杂的东西,所以使用小而简单的Shiro就足够了。对于它俩到底哪个好,这个不必纠结,能更简单的解决项目问题就好了。 Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JavaEE环境。Shiro可以帮助我们完成:认证、授权、加密、

m0_67400973的博客 745

流媒体弱网优化之路(NACK)——纯NACK方案的优化探索

流媒体学习之路(NACK)——纯NACK方案的最高性能 文章目录流媒体学习之路(NACK)——纯NACK方案的最高性能一、NACK简介二、Nack的理解2.1 一种补救策略2.2 什么时候要?2.3 要多少?2.4 怎么要?三、计算分析3.1 rtt强相关3.2 补包次数计算3.3 Nack的定时发送3.4 nack重传限制四、实验   近期在针对纯丢包场景做一些简单的探索实验,一个让我困扰的问题就是:不使用FEC而只是通过纯NACK进行补偿,到底能在实验环境下抵抗多少的丢包呢?每一次丢包补偿的最大时长

qw225967的博客 1万+

Android开发实战:5分钟搞定全屏沉浸式状态栏(附完整代码示例)

本文提供了Android开发中实现全屏沉浸式状态栏的完整实战指南。通过对比主题配置、动态代码设置和Window标志位三种方法,详细讲解了如何隐藏状态栏并处理布局适配。文章还涵盖了刘海屏、手势导航等高级适配场景,并附有可直接使用的工具类代码,帮助开发者快速提升应用视觉体验。

weixin_29197699的博客 358

Java安全框架Shiro:认证授权与会话管理实战

在Java应用开发中,安全框架是实现认证(Authentication)和授权(Authorization)的核心组件。Apache Shiro作为轻量级安全框架,通过简洁的API设计降低了安全功能的实现难度。其核心原理基于Subject概念,将用户身份验证、权限控制和会话管理等功能模块化。技术价值体现在支持多种认证方式、细粒度权限控制以及独立于容器的会话管理。典型应用场景包括Web应用安全控制、API接口保护和微服务架构中的身份验证。Shiro特别适合需要快速实现安全功能的中小型项目,其内置的密码加密和缓

weixin_33895516的博客 423

海康SDK回调PS流解析实战:从字节流到前端H264播放的完整流程

本文详细介绍了海康SDK回调PS流解析的完整流程,从字节流获取到前端H264播放的实现。涵盖SDK初始化、PS流数据结构解析、H264裸流提取、WebSocket传输及前端播放器集成等关键步骤,为视频监控系统开发提供实用指导。

weixin_29061531的博客 200

Apache Shiro快速入门:Java安全框架核心概念与Spring Boot集成实战

在Java应用开发中,身份认证与授权是保障系统安全的核心机制。其基本原理是通过验证用户身份(认证)和控制资源访问权限(授权)来构建安全防线。这一技术价值在于将复杂的安全逻辑抽象化,使开发者能够专注于业务实现。在微服务、前后端分离等现代架构中,高效管理用户会话和权限成为刚需。Apache Shiro作为一个轻量级Java安全框架,通过简洁的API封装了认证、授权、会话管理等关键功能,降低了安全集成的复杂度。其核心组件如Subject、SecurityManager和Realm,共同构成了灵活的安全数据桥梁,支

weixin_30527423的博客 379

人群仿真软件:Pathfinder_(14).与其他软件的集成与互操作

在人群仿真软件的二次开发中,与其他软件的集成和互操作是非常重要的。通过数据导入导出、接口调用和脚本编写,可以显著提升仿真的准确性和实用性。Pathfinder提供了多种数据格式的支持和丰富的API,使得与其他软件的集成变得简单高效。无论是建筑模型的导入、仿真结果的导出,还是实时数据的交换,Pathfinder都能满足用户的需求。

kkchenjj的博客 1015

时空智友企业流程化管控系统文件上传漏洞

时空智友企业流程化管控系统是一个功能丰富、灵活可定制的企业管理工具。通过该系统,企业能够实现流程的自动化、协同的提升、数据的洞察和决策的优化,从而提高工作效率、管理水平和企业竞争力。时空智友企业流程化管控系统 formservice接口处存在任意文件上传漏洞,未经认证的攻击者可通过此接口上传后门文件,最终可导致服务器失陷。

holyxp的博客 1030

Shiro反序列化漏洞深度解析:从原理到检测与防御实践

Java反序列化漏洞是Web安全领域的经典议题,其核心原理在于攻击者通过构造恶意的序列化数据,诱使应用在反序列化过程中执行任意代码。这项技术之所以具有持续威胁,是因为它利用了Java对象序列化/反序列化机制的设计特性,能够绕过常规的输入验证,直接威胁应用底层安全。从技术价值看,理解反序列化漏洞是构建纵深防御体系、提升应用层威胁检测能力的关键。在应用场景上,它常见于使用Java反序列化进行数据传输或状态存储的框架中,例如Apache Shiro框架的RememberMe身份验证功能。本文聚焦于Shiro反序列

weixin_33672400的博客 442

手把手教你学simulink(26.7)--控制算法场景示例:基于模型预测控制(MPC)的智能温室环境控制系统

首先,我们需要将温室环境的动力学模型转换为状态空间形式。假设我们有四个状态变量:温度 TT、湿度 HH、光照强度 II 和二氧化碳浓度 CCO2CCO2​,以及四个控制输入:加热器功率 u1u1​、加湿器加湿量 u2u2​、通风扇风速 u3u3​ 和补光灯光照强度 u4u4​。状态空间模型可以表示为:x(t)=[T(t),H(t),I(t),CCO2(t)]Tx(t)=[T(t),H(t),I(t),CCO2​(t)]T 是状态向量。

MHD0815的博客 400

Apache Shiro反序列化漏洞:超越默认密钥的实战检测与利用手法

Java反序列化漏洞是Web安全领域的经典议题,其原理在于攻击者通过构造恶意序列化数据,在目标应用反序列化时触发任意代码执行。这一机制常被用于远程命令执行,对应用安全构成严重威胁。在Java生态中,Apache Shiro框架因其广泛使用和特定的RememberMe Cookie处理机制,成为反序列化漏洞的高发区。传统的检测方法依赖默认密钥字典爆破,但随着安全意识的提升,其有效性已大幅降低。本文聚焦于更贴合实战的隐蔽检测技术,例如利用Padding Oracle攻击原理分析服务器响应差异进行密钥探测,以及结

weixin_34238633的博客 372

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

上一篇: Java Zip/Unzip Files 记录
下一篇: Trouble Shooting -- WebSphere 连接池不够使用的问题
开心的D哥
博客等级 码龄22年 63粉丝 110原创
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值