您的位置:首页 > 其它

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

2015-07-10 09:42 357 查看
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;

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息