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

原创 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;
    }
}

相关文章推荐

Servlet 过滤器实现一段时间内请求次数过滤

为防止用软件频繁请求突然想到的简单实现方法,通过servlet的过滤器便可解决 package com.wiker; import java.io.IOException; import ja...

Nginx限制某一段时间内同一ip访问数及并发连接数配置

转载自:http://www.cnblogs.com/aoniboy/p/4730354.html      如何设置能限制某个IP某一时间段的访问次数是一个让人头疼的问...

js在一定时间内跳转页面及各种页面刷新

js在一定时间内跳转页面及各种页面刷新 1.js 代码: var time = 5; //时间,秒   var timelong = 0;   ...
  • oqqYeYi
  • oqqYeYi
  • 2014年10月27日 10:16
  • 972

iOS中自定义界面统计(统计一定时间内访问次数,以及停留时间)

由于我们的app做的是p2p以及奇葩的产品经理,好好的友盟统计不用,非要用自己和服务器交互的统计,只能自己写,然后每隔一段时间上传一次咯! 直接上代码吧! 1.首先自定义一个类:(用于统计...

限制某个程序在规定时间内运行

  • 2008年12月24日 17:37
  • 224KB
  • 下载

主元素问题(判断数组是否出现主元素,O(n)时间内找出主元素,主元素出现次数)

x称为一个长度为n的数组a的主元素,如果这个数组里面等于x的元素数目不少于n/2个。例如,a={2,3,2,2,5,3,2,4,2}, x = 2就是主元素。给定包含n个元素的数组a,主元素问题就是判...
  • lalor
  • lalor
  • 2012年03月09日 22:25
  • 3612

Mysql如何查询连续时间内的次数

转自:http://www.tuicool.com/articles/uyEZJf 在网上看到一道有意思的题目,大意是如何在mysql查询连续在线的天数。 所谓的连续在线是指相邻两天都登录过,不...

一定时间内的IP数据包的截获

  • 2016年12月04日 17:43
  • 3KB
  • 下载

js 实现 页面访问时间限制

  • 2010年03月30日 14:54
  • 1KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:限制页面请求在一定时间内的访问次数
举报原因:
原因补充:

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