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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值