限制页面请求在一定时间内的访问次数

原创 2015年07月10日 09:42:35
public class SiteController extends AbstractController {
    private WMPersonAttributeDao wmPersonAttributeDao;
    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String ip=request.getRemoteAddr();//获得请求ip
        String sites;
        Reminder reminder=new Reminder(request.getSession(),ip);
        boolean  flag= reminder.removeSession(60);//60秒清零一次对同一ip访问次数的统计
        if(!flag){
            sites="moreTimes";
        }else{
            String username=request.getParameter("username");
            sites = wmPersonAttributeDao.getSitesByName(username);
        }
        response.getWriter().print(sites);
        return null;
    }


    public WMPersonAttributeDao getWmPersonAttributeDao() {
        return wmPersonAttributeDao;
    }


    public void setWmPersonAttributeDao(WMPersonAttributeDao wmPersonAttributeDao) {
        this.wmPersonAttributeDao = wmPersonAttributeDao;
    }


}

//第二个类

/**
 * 定时清除session中同一ip访问次数
 */
public class Reminder {
    private   HttpSession session;
    private String ip;
    public Reminder(){}
    public Reminder(HttpSession session,String ip) {
        this.session=session;
        this.ip=ip;
    }
    public boolean removeSession(int seconds){
        Integer index0=(Integer)session.getAttribute(ip);//获得当前请求ip对应的访问次数
        int count=0;
        if(index0==null){
            Runnable runnable=new Runnable() {
                @Override
                public void run() {
                    session.removeAttribute(ip);
                }
            };
            ScheduledExecutorService scheduledExecutorService= Executors.newSingleThreadScheduledExecutor();
            scheduledExecutorService.schedule(runnable,seconds,TimeUnit.SECONDS);
            count=0;
        }else{
            count=index0;
        }
        session.setAttribute(ip,count+1);//记录相同ip访问次数
        if(count>4)//每分钟5次{
        {
            return  false;
        }
        else
            return true;
    }
}

在一定的时间内限制访问次数

读取页面的访问次数时, 如果按刷新的时候会一直增加, 为了让其不随便增加, 必须要加限制条件来控制....
  • cbynietg
  • cbynietg
  • 2010年01月19日 14:17
  • 2851

在java项目中,如何限制每个用户访问接口的次数?

方法1:数据访问量大的话 用redis来做,用户在调用短信接口时,先根据用户id去查一下次数,如果没有id这个key,证明就是1分钟内首次发送,发送后,在redis中记录一个key为id的次数为一次,...
  • qq_30947533
  • qq_30947533
  • 2017年12月19日 16:58
  • 306

支付宝面试题: 30秒内限制某方法被调用100次 (一个时间段限制方法被调用的次数)

支付宝面试题: 30秒内限制某方法被调用100次
  • wengyupeng
  • wengyupeng
  • 2014年04月04日 16:29
  • 6783

C# 关于API 限制调用次数方法

一般短信接口,或者付费的接口,需要做一定时间内调用次数的限制。 本文主要根据客户端 ip 做区分调用次数,只考虑可能会有一级代理级别。 首先,我们根据以下两行代码获取客户端ip  string ...
  • qq_15555767
  • qq_15555767
  • 2018年01月30日 18:53
  • 83

php 限制用户接口请求频率

有时候我们需要限制一个API访问的频率,例如单用户一分钟之内只能访问多少次。 类似于这样的需求很容易用Redis来实现。 ...
  • m0_38020242
  • m0_38020242
  • 2017年10月23日 19:22
  • 727

php限制单用户接口请求频率

有时候我们需要限制一个API访问的频率,例如单用户一分钟之内只能访问多少次。 类似于这样的需求很容易用Redis来实现。 ...
  • xxq929604980
  • xxq929604980
  • 2017年02月18日 12:27
  • 1135

服务器访问次数限制实现的思路

有个每分钟只能访问10次接口的需求,想到2个实现方法,代码都实现了,分享给大家,希望可以一起进步,一开始的思路是记录下用户访问的时间和次数,然后在写一些方法实现。最先想到是记录在数据库里,刚好数据库有...
  • a032011025hf
  • a032011025hf
  • 2017年08月09日 14:22
  • 460

[SpringMVC]自定义注解实现控制器访问次数限制

我们需要根据IP去限制用户单位时间的访问次数,防止刷手机验证码,屏蔽注册机等,使用注解就非常灵活了 1 定义注解 查看文本打印 @Retention(Retent...
  • xpzhang123
  • xpzhang123
  • 2016年11月03日 15:29
  • 464

php 接口如何使同一用户在规定时间内访问规定的次数

有时候我们需要限制一个API访问的频率,例如单用户一分钟之内只能访问多少次。 类似于这样的需求很容易用Redis来实现。 php $redis = new Predis\Clien...
  • qq_39902227
  • qq_39902227
  • 2017年12月29日 20:08
  • 35

API调用次数限制实现

API调用次数限制实现 参考资料:     1. https://zhuanlan.zhihu.com/p/20872901?hmsr=toutiao.io&utm_medium=tout...
  • chenglinhust
  • chenglinhust
  • 2016年05月21日 20:24
  • 7475
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:限制页面请求在一定时间内的访问次数
举报原因:
原因补充:

(最多只允许输入30个字)