修改密码时限制1分钟内请求次数,超过次数的请求拒绝处理

参考的思路是 Servlet实现用户请求次数的统计

此文档的业务是统计请求次数,并没有限制次数。

需要掌握的内容:1,Session:生命周期,原理。发现除了HttpServletRequest,getSession() 。shiro框架也有Session:SecurityUtils.getSubject().getSession(),此次使用的Shiro框架的session,且查看了Shiro框架的SecurityUtils.getSubject().logout();【退出】功能的注释信息,调用该方法会删除session或者使session无效化。

Logs out this Subject and invalidates and/or removes any associated entities, such as a {@link Session Session} and authorization data.

解决方案:session维护一个Map<String ,Long>。

Map存两种信息,信息1:<第n次请求的n,时间戳>,信息2:<记录最大的n的key,比如maxCount,n>

      /* 业务:限制1分钟内的请求次数,超出请求的限制次数,拒绝该请求
         * map(k=session中用户的第n次请求,v=请求时的时间戳)以及保存一个请求次数(k = maxCount,v= 请求的最大数 )
         * 1,判断session是否包含countTimeMap。是,计算100次请求的时间间隔,如果session里不足100次请求,忽略计算。
         *   不包含countTimeMap,则初始化countTimeMap
         * 2,判断100次请求时间间隔是否小于60S。是,拒绝该请求。
         */

计算时间间隔:

Long rfl = Long.parseLong(PropertiesUtil.get("REQUEST_FREQUENCY_LIMIT"));   //读取配置文件的值
            //
            if (maxCount.longValue() >= rfl.longValue()) {
                Long queryCount = maxCount - rfl + 1;
                if (map.get(String.valueOf(queryCount)) != null) {
                    //计算时间间隔(秒)
                    interValMin =
                            (System.currentTimeMillis() - map.get(String.valueOf(queryCount))) / 1000;
                }
            }

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值