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

来源:互联网 发布:网络视频下载 编辑:程序博客网 时间:2024/05/16 09:31

为防止用软件频繁请求突然想到的简单实现方法,通过servlet的过滤器便可解决

package com.wiker;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.annotation.WebFilter;import javax.servlet.http.HttpServletRequest;/** * @author Wiker Yong Email:<a href="mailto:wikeryong@gmail.com">wikeryong@gmail.com</a> * @date 2013-8-26 下午1:34:28 * @version 1.0-SNAPSHOT */@WebFilter(urlPatterns={"/*"})public class IpCountFilter implements Filter {    private final static String sessionKey = "SESSION_IP_COUNT";    private final static int maxRequest = 10;   //最大次数    private final static int time=30000;       //时间段(毫秒)        public void destroy() {        // TODO Auto-generated method stub            }    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)            throws IOException, ServletException {        System.out.println("进入过滤器");        HttpServletRequest req = (HttpServletRequest) request;        IpCount t = (IpCount) req.getSession().getAttribute(sessionKey);        if(t == null){            t = new IpCount();            t.setFirstTime(System.currentTimeMillis());            t.setTimes(1);            req.getSession().setAttribute(sessionKey, t);            System.out.println("第一次进入过滤器"+t.getTimes());            chain.doFilter(request, response);        }else{            if(System.currentTimeMillis()-t.getFirstTime()<=time){                if(t.getTimes()<=maxRequest){                    t.setTimes(t.getTimes()+1);                    req.getSession().setAttribute(sessionKey, t);                    System.out.println("小于规定时间内的请求次数,放行1:"+t.getTimes());                    chain.doFilter(request, response);                }else{                    System.out.println("超过了规定时间内的请求次数"+t.getTimes());                                    }            }else{                t.setFirstTime(System.currentTimeMillis());                t.setTimes(1);                req.getSession().setAttribute(sessionKey, t);                System.out.println("小于规定时间内的请求次数,放行2:"+t.getTimes());                chain.doFilter(request, response);            }        }    }    public void init(FilterConfig arg0)            throws ServletException {        // TODO Auto-generated method stub            }    }class IpCount{    private long firstTime;    private int times;    public long getFirstTime() {        return firstTime;    }    public void setFirstTime(long firstTime) {        this.firstTime = firstTime;    }    public int getTimes() {        return times;    }    public void setTimes(int times) {        this.times = times;    }}


原创粉丝点击