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; }}
- Servlet 过滤器实现一段时间内请求次数过滤
- Filter过滤器的使用,实现在规定时间内过滤请求
- Servlet实现请求过滤
- jedis 实现 redis 统计一个用户在一段时间内的登录次数
- Servlet实现用户请求次数的统计
- 过滤Servlet--过滤器
- 过滤器过滤请求.jsp
- Filter过滤器 过滤请求
- 限制页面请求在一定时间内的访问次数
- 13. Servlet 请求/响应过滤器
- Servlet过滤器简介与字符串过滤
- 利用Servlet的过滤器过滤非法文字!
- 过滤器过滤一个包内所有servlet
- 一段时间内的迷惑
- 查找一段时间内日志
- 获取一段时间内数据
- servlet 过滤器实现 请求转发(跳转);跨域转发请求;tomcat 环境下。
- 用Servlet、JSP实现帐号注册页面,用过滤器过滤对象防止中文乱码
- Jom 读取XMl文件
- sql获取数据结构
- Android onActivityResult
- HDU 1050 Moving Tables
- 新浪微博Oauth2.0授权 获取Access Token以及API的使用
- Servlet 过滤器实现一段时间内请求次数过滤
- mysql免安装版本使用
- 数据库视频总结
- background和background-Color的区别
- hibernate-事务管理
- vs2008 在多线程环境下,有没有调试单个线程运行的功能?
- 使用MFC的API函数获取Window下的特殊目录(例如CSIDL_PERSONAL 我的文档)
- Dynamics CRM 2013 初体验(6):Form
- LeetCode 14: Longest Common Prefix