文档章节

Servlet 过滤器短时间恶意刷请求

目翟
 目翟
发布于 2013/12/30 13:33
字数 251
阅读 39
收藏 0
点赞 0
评论 0
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;

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



© 著作权归作者所有

共有 人打赏支持
目翟
粉丝 4
博文 25
码字总数 26183
作品 0
闸北
高级程序员
web项目中web.xml的作用

每个javaEE工程中都有web.xml文件,那么它的作用是什么呢?它是每个web.xml工程都必须的吗? 一个web中可以没有web.xml文件,也就是说,web.xml文件并不是web工程必须的。 web.xml文件是用来...

ChinaHYF ⋅ 04/27 ⋅ 0

Java面试题之JavaWeb高级

一、Filter和Listener Filter:从J2EE1.3开始,Servlet2.3规范中加入对Filter的支持。Filter就称之为过滤器,它是Servlet技术中最激动人心的技术WEB开发人员通过Filter技术可以对web服务器管理...

年轻诠释我们的梦想_705b ⋅ 06/02 ⋅ 0

tomcat学习笔记之servlet 容器

1、servlet 容器用来处理请求servlet资源、为客户端封装Response 对象的模块 2、tomcat 容器分四种: Engine:整个Catalina servlet 引擎 Host:包含一个或多个Context 容器的虚拟主机 Cont...

职业搬砖20年 ⋅ 06/08 ⋅ 0

Servlet的一些细节--学习笔记

Servlet细节 1)浏览器访问的url-pattern只是一个符合格式的任意字符串,以/开头 2)一个Servlet的url-pattern可以是1个或多个,有二种形式; a).xx b)/xx/ 注意:/不能一起直接使用 3)/和....

知止内明 ⋅ 04/17 ⋅ 0

JavaWeb开发比较重要的面试题

JavaWeb开发比较重要的面试题 1. 编码转换:怎样将GB2312编码的字符串转换为ISO-8859-1编码的字符串? 答:示例代码如下: String s1=”你好”; String s2=new String(s1.getBytes(“GB2312”...

xj_9264 ⋅ 05/06 ⋅ 0

web.xml中Filter,Listener,Servlet的区别

一、Servlet Servlet是基本的服务端程序,他来自接口Servlet,接口中有方法service。而Servlet的一个重要实现类,则是tomcat服务器的核心,那就是HttpServlet HttpServlet有方法: public a...

architect刘源源 ⋅ 05/04 ⋅ 0

Java Web(一) Servlet详解!!

一、什么是servlet?     处理请求和发送响应的过程是由一种叫做Servlet的程序来完成的,并且Servlet是为了解决实现动态页面而衍生的东西。理解这个的前提是了解一些http协议的东西,并且...

architect刘源源 ⋅ 05/08 ⋅ 0

干货!从Tomcat执行流程了解jsp是如何被解析的,错误提示是哪里生成的。

一.关于Tomcat组成 先上张图: Tomcat组成: 1.Server:代表整个 servlet 容器,如Tomcat,JBoss之类的。 2.Service:它由一个或者多个Connector组成,以及一个Engine,负责处理所有Connect...

宇的季节 ⋅ 05/07 ⋅ 0

web.xml中在Servlet中获取context-param和init-param内的参数

web.xml里面可以定义两种参数: 1.application范围内的参数,存放在servletcontext中,在web.xml中配置如下: <context-param> <param-name>context/param</param-name> <param-value>avalib......

村长大神 ⋅ 2014/10/27 ⋅ 0

JavaWeb09-HTML篇笔记(二)

1.1 案例一:使用Servlet完成一个用户登录的案例.1.1.1 需求: 在网站的首页上,登录的链接,点击登录的链接,可以跳转到登录的页面.在登录的页面中输入用户名和密码点击登录的案例.完成登录的功...

我是小谷粒 ⋅ 05/21 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

内核线程、轻量级进程、用户线程

线程与进程概念 在现代操作系统中,进程支持多线程。 进程是资源管理的最小单元; 线程是程序执行的最小单元。 即线程作为调度和分配的基本单位,进程作为资源分配的基本单位 一个进程的组成...

117 ⋅ 14分钟前 ⋅ 0

elasticsearch2.4.6升级为elasticsearch-5.5.0的经历

将elasticsearch-5.5.0 中的配置 path.data 指向原来的数据路径 即 path.data: /usr/local/src/elasticsearch-2.4.6/data 注意: elasticsearch-5.5.0 需要将jdk版本升级到1.8...

晨猫 ⋅ 15分钟前 ⋅ 1

lvm讲解 磁盘故障小案例

1

oschina130111 ⋅ 19分钟前 ⋅ 0

那些提升开发人员工作效率的在线工具

本文转载自公众号 Hollis 作为一个Java开发人员,经常要和各种各样的工具打交道,除了我们常用的IDE工具以外,其实还有很多工具是我们在日常开发及学习过程中要经常使用到的。 Hollis偏爱使用...

时刻在奔跑 ⋅ 31分钟前 ⋅ 0

restful风格 实现DELETE PUT请求 的web.xml的配置

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframe......

泉天下 ⋅ 37分钟前 ⋅ 0

Shell数组

Shell数组 Shell在编程方面比Windows批处理强大很多,无论是在循环、运算。 bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数...

蜗牛奔跑 ⋅ 46分钟前 ⋅ 0

nmap为了开发方便 可以做简单的修改

因为nmap扫描是默认使用的是nse脚本,但是在开发的过程中需要修改后缀(主要是因为后缀为lua才能显示高亮,所以这里用一个取巧的办法) nse_main.lua文件中我们找到如下代码 local t, path = cn...

超级大黑猫 ⋅ 50分钟前 ⋅ 0

springmvc获取axios数据为null情况

场景:前端用了vue没有用ajax与后台通信,用了axios,但是在代码运行过程中发现axios传递到后台的值接受到数据为null。 问题原因:此处的问题在与axios返回给后台的数据为json类型的,后台接...

王子城 ⋅ 52分钟前 ⋅ 0

hadoop技术入门学习之发行版选择

经常会看到这样的问题:零基础学习hadoop难不难?有的人回答说:零基础学习hadoop,没有想象的那么难,也没有想象的那么容易。看到这样的答案不免觉得有些尴尬,这个问题算是白问了,因为这个...

左手的倒影 ⋅ 52分钟前 ⋅ 0

806. Number of Lines To Write String - LeetCode

Question 806. Number of Lines To Write String Solution 思路:注意一点,如果a长度为4,当前行已经用了98个单元,要另起一行。 Java实现: public int[] numberOfLines(int[] widths, Str...

yysue ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部