`
那可儿
  • 浏览: 1325 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

filter

阅读更多
转载于http://goodgoodstudydaydayup.iteye.com/blog/290235

Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应。
主要用于对HttpServletRequest 进行预处理,也可以对HttpServletResponse 进行后处理,是个典型的处理链。
Filter 有如下几个用处。
·在HttpServletRequest 到达Servlet 之前,拦截客户的HttpServletRequest 。
·根据需要检查HttpServletRequest ,也可以修改HttpServletRequest 头和数据。
·在HttpServletResponse 到达客户端之前,拦截HttpServletResponse 。
·根据需要检查HttpServletResponse ,也可以修改HttpServletResponse 头和数据。
Filter 有如下几个种类。
·用户授权的Filter: Filter 负责检查用户请求,根据请求过滤用户非法请求。
.日志Filter: 详细记录某些特殊的用户请求。
·负责解码的Filter: 包括对非标准编码的请求解码。
.能改变XML 内容的XSLTFilter 等。
一个Filter 可负责拦截多个请求或响应:一个请求或响应也可被多个请求拦截。
创建一个Filter 只需两个步骤:
(1)创建Filter 处理类:
(2)在web.xml 文件中配置Filter 。
一、创建Filter类
创建Filter 必须实现javax.servlet.Filter 接口,在该接口中定义了三个方法。
• void init(FilterConfig config): 用于完成Filter 的初始化。
• void destroy(): 用于Filter 销毁前,完成某些资源的回收。
• void doFilter(ServletRequest request, ServletResponse response,FilterChain chain): 实现过滤功能,该方法就是对每个请求及响应增加的额外处理。
Java代码  收藏代码
public class LogFilter implements Filter { 
 
    private FilterConfig config; 
 
    // 实现初始化方法 
    public void init(FilterConfig config) { 
        this.config = config; 
    } 
 
    // 实现销毁方法 
    public void destroy() { 
        this.config = null; 
    } 
 
    public void doFilter(ServletRequest request, ServletResponse response, 
            FilterChain chain) { 
        // 获取ServletContext 对象,用于记录日志 
        ServletContext context = this.config.getServletContext(); 
        long before = System.currentTimeMillis(); 
        System.out.println("开始过滤... "); 
        // 将请求转换成HttpServletRequest 请求 
        HttpServletRequest hrequest = (HttpServletRequest) request; 
        // 记录日志 
        context.log("Filter已经截获到用户的请求的地址: " + hrequest.getServletPath()); 
        try { 
            // Filter 只是链式处理,请求依然转发到目的地址。 
            chain.doFilter(request, response); 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
        long after = System.currentTimeMillis(); 
        // 记录日志 
        context.log("过滤结束"); 
        // 再次记录日志 
        context.log(" 请求被定位到" + ((HttpServletRequest) request).getRequestURI() 
                + "所花的时间为: " + (after - before)); 
    } 


在上面的请求Fil阳中,仅在日志中记录请求的URL,对所有的请求都执行chain.doFilter(request,reponse)方法,当Filter 对请求过滤后,依然将请求发送到目的地址。如果检查权限,可以在Filter 中根据用户请求的HttpSession,判断用户权限是否足够。如果权限不够,则调用重定向即可,无须调用chain.doFilter(request,reponse)方法。
二、配置Filter
Filter 的配置和Servlet 的配置非常相似,都需要配置两个部分:
·配置Filter 名。
·配置Filter 拦截URL 模式。
区别在于, Servlet 通常只配置一个URL ,而Filter 可以同时拦截多个请求的URL。因此,可以配置多个Filter 拦截模式。
Xml代码  收藏代码
<!-- 定义Filter --> 
<filter> 
    <!-- Filter 的名字 --> 
    <filter-name>log</filter-name> 
    <!-- Filter 的实现类 --> 
    <filter-class>lee.LogFilter</filter-class> 
</filter> 
<!-- 定义Filter 拦截地址 --> 
<filter-mapping> 
    <!-- Filter 的名字 --> 
    <filter-name>log</filter-name> 
    <!-- Filter 负责拦截的URL --> 
    <servlet-name>*</servlet-name> 
</filter-mapping> 
分享到:
评论

相关推荐

    预防XSS攻击和SQL注入XssFilter

    &lt;filter-name&gt;XssFilter&lt;/filter-name&gt; &lt;filter-class&gt;com.xxx.Filter.XssFilter&lt;/filter-class&gt; &lt;/filter&gt; &lt;filter-mapping&gt; &lt;filter-name&gt;XssFilter&lt;/filter-name&gt; &lt;url-pattern&gt;/* &lt;/filter-mapping&gt;

    filter对request请求拦截,对请求参数进行修改

    对request请求进行拦截,... &lt;filter-class&gt;weixin.idea.waiting.cq.controller.JsFilter&lt;/filter-class&gt; &lt;/filter&gt; &lt;filter-mapping&gt; &lt;filter-name&gt;sqlFilter&lt;/filter-name&gt; &lt;url-pattern&gt;/* &lt;/filter-mapping&gt;

    delphi资源-Filter中的模糊过滤

    Filter中的模糊过滤: 要实现模糊过滤,BDE中要用“*”,不允许使用“Like”关键字,且只能向后匹配,如“Fcode=’101*’”;而ADO则是使用“%”或“*”都可以,可以使用“Like”关键字,且和SQL语句用法一致,可以...

    NDIS Filter Drivers指南

    Filter Drivers主要包括以下特性:   1) 一个Filter Drivers实例叫Filter Module。Filter Module附加在一个适配器的微端口驱动上, 来自相同或不同Filter Drivers的多个Filter Module都可以被堆叠在一个网络...

    Servlet Filter 的单元测试

    Servlet Filter 的单元测试Servlet Filter 的单元测试Servlet Filter 的单元测试Servlet Filter 的单元测试Servlet Filter 的单元测试

    Bloom Filter概念和原理

    Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。Bloom Filter的这种高效是有一定代价的:在判断一个元素是否属于某个集合时,有可能会把不...

    Electronic Filter Design Handbook

    Refinements in LC Filter Design and the Use of Resistive Networks Chapter 9. Design and Selection of Inductors for LC Filters Chapter 10. Component Selection for LC and Active Filters Chapter 11. ...

    利用java filter 实现业务异常拦截源码

    利用java filter 实现业务异常拦截 跳转到错误信息提示页面 我们在做项目中肯定都会遇到自定义业务异常 ,然后将业务异常信息跳转的统一的信息提示页面的情况,比如我们在struts的时候我们会用到struts的异常处理...

    java filter打印请求返回参数

    java filter打印请求返回参数

    FilterPro低通滤波器设计软件及中文使用资料.rar_FilterProDT 下载_filterpro

    FilterPro低通滤波器设计软件及中文使用资料,用于设计滤波器,放大器

    What is notch filter

    A Notch filter is a filter that passes all frequencies except those in a stop band centered on a center frequency. A closely related Knowledgebase item discusses the concept of the Q of a filter. ...

    Kalman Filter卡尔曼滤波 java实现

    KalmanFilter,KalmanFilter3,KalmanFilter5 一共7种,以上三种实现保证可用,其余待调试,调试函数写好,直接运行即可 KalmanFilter KalmanFilter2 KalmanFilter3 KalmanFilter4 KalmanFilter5 KalmanFilter6 Kalman...

    FilterPro软件安装

    ti官方软件FilterPro,滤波器设计软件,win10可运行

    filter wiz pro v5

    Filter Wiz Pro适用于低于-1Hz 至10MHz 范围内的截止频率,而适用于此范围的无源滤波器设计必须具备非常大的组件值和组件尺寸  Filter Wiz Pro在几分钟内便能让您设计、优化和仿真一套完整的多级有源滤波器解决方案...

    Microwave_filter_design

    This thesis presents an entire design process for filter synthesis of narrow to moderate bandwidth filters, from an investigation of the basic theory through to the development of a generalised ...

    C语言头文件 FILTER

    C语言头文件 FILTERC语言头文件 FILTERC语言头文件 FILTERC语言头文件 FILTERC语言头文件 FILTERC语言头文件 FILTERC语言头文件 FILTERC语言头文件 FILTERC语言头文件 FILTERC语言头文件 FILTERC语言头文件 FILTERC...

    cors-filter-1.7.jar,cors-filter-2.5.jar,cors-filter-2.10.jar

    Tomcat 在设置跨域 jar包的一部分,cors-filter-1.7.jar,cors-filter-2.5.jar,cors-filter-2.10.jar

    matalb函数filter的C++实现

    matlab函数filter的C++简答实现

    jquery.multiselect.filter

    jquery.multiselect.filter.js ; jquery.multiselect.filter.css

    cors-filter-2.10.jar

    Tomcat设置跨域访问,cors-filter最新版本

Global site tag (gtag.js) - Google Analytics