`

JavaWeb过滤器Filter

 
阅读更多

Filter也称为过滤器,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能

  Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter。通过Filter技术,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截。简单说,就是可以实现web容器对某资源的访问前截获进行相关的处理,还可以在某资源向web容器返回响应前进行截获进行处理。

1、新建一个类,实现Filter接口

2、实现doFilter()方法

3、在web.xml中进行配置(参照Servlet配置)

复制代码
 1 package com.test.filter;
 2 
 3 import java.io.IOException;
 4 import javax.servlet.Filter;
 5 import javax.servlet.FilterChain;
 6 import javax.servlet.FilterConfig;
 7 import javax.servlet.ServletException;
 8 import javax.servlet.ServletRequest;
 9 import javax.servlet.ServletResponse;
10 public class Demo1Filter implements Filter {
11     private FilterConfig filterConfig;
12 
13     public void doFilter(ServletRequest request, ServletResponse response,
14             FilterChain chain) throws IOException, ServletException {
15         System.out.println("Demo1过滤前");
16         System.out.println(filterConfig.getInitParameter("param1"));
17         chain.doFilter(request, response);//放行。让其走到下个链或目标资源中
18         System.out.println("Demo1过滤后");
19     }
20 
21     public void init(FilterConfig filterConfig) throws ServletException {
22         System.out.println("初始化了");
23         this.filterConfig = filterConfig;
24     }
25 
26     public void destroy() {
27         System.out.println("销毁了");
28     }
29 }
复制代码
复制代码
 1  <filter>
 2      <filter-name>Demo1Filter</filter-name>
 3      <filter-class>com.itheima.filter.Demo1Filter</filter-class>
 4      <init-param>
 5          <param-name>param1</param-name>
 6          <param-value>value在这里呢</param-value>
 7      </init-param>
 8  </filter>
 9  <filter-mapping>
10      <filter-name>Demo1Filter</filter-name>
11      <url-pattern>/*</url-pattern>
12      <dispatcher>REQUEST</dispatcher> <!-- 没有配置dispatcher就是默认request方式的 -->
13      <dispatcher>FORWARD</dispatcher>
14      <dispatcher>ERROR</dispatcher>
15      <dispatcher>INCLUDE</dispatcher>
16  </filter-mapping>
复制代码

Filter的应用场景

通过对filter过滤器的了解,可以得知在以下三种情况下可以做些处理:

1> 通过控制对chain.doFilter的方法的调用,来决定是否需要访问目标资源。

比如,可以在用户权限验证等等。判断用户是否有访问某些资源的权限,有权限放行,没权限不执行chain.doFilter方法。

2> 通过在调用chain.doFilter方法之前,做些处理来达到某些目的。

比如,解决中文乱码的问题等等。可以在doFilter方法前,执行设置请求编码与响应的编码。甚至可以对request接口进行封装装饰来处理get请求方式的中文乱码问题(重写相应的request.getParameter方法)

3> 通过在调用chain.doFilter方法之后,做些处理来达到某些目的。

比如对整个web网站进行压缩。在调用chain.doFilter方法之前用类Aresponse对象进行封装装饰,重写getOutputStream和重写getWriter方法。在类A内部中,将输出内容缓存进ByteArrayOutputStream流中,然后在chain.doFilter方法执行后,获取类AByteArrayOutputStream流缓存数据,用GZIPOutputStream流进行压缩下。

Filter实现拦截的原理

  Filter接口中有一个doFilter方法,当开发人员编写好Filter类实现doFilter方法,并配置对哪个web资源进行拦截后,WEB服务器每次在调用web资源的service方法之前(服务器内部对资源的访问机制决定的),都会先调用一下filterdoFilter方法

Filter生命周期

  Servlet一样Filter的创建和销毁也是由WEB服务器负责。不过与Servlet区别的是

1>在应用启动的时候就进行装载Filter(Servletload-on-startup配置效果相同)

2>容器创建好Filter对象实例后,调用init()方法。接着被Web容器保存进应用级的集合容器中去了等待着,用户访问资源。

3>当用户访问的资源正好被Filterurl-pattern拦截时,容器会取出Filter类调用doFilter方法,下次或多次访问被拦截的资源时,Web容器会直接取出指定Filter对象实例调用doFilter方法(Filter对象常驻留Web容器了)

4>应用服务被停止或重新装载了,则会执行Filterdestroy方法,Filter对象销毁。

注意:init方法与destroy方法只会直接一次。

Filter部署应用注意事项

1> filter-mapping标签中servlet-nameurl-pattern

Filter不仅可以通过url-pattern来指定拦截哪些url匹配的资源。而且还可以通过servlet-name来指定拦截哪个指定的servlet(专门为某个servlet服务了,servlet-name对应Servlet的相关配置)

2> filter-mapping标签中dispatcher

指定过滤器所拦截的资源被 Servlet 容器调用的方式,可以是REQUEST,INCLUDE,FORWARDERROR之一,默认REQUEST。用户可以设置多个<dispatcher> 子元素用来指定 Filter 对资源的多种调用方式进行拦截。

REQUEST

当用户直接访问页面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcherinclude()forward()方法访问或ERROR情况时,那么该过滤器就不会被调用。

INCLUDE

如果目标资源是通过RequestDispatcherinclude()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。

FORWARD

如果目标资源是通过RequestDispatcherforward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。

ERROR

如若在A.jsp页面page指令中指定了error属性=examError.jsp,那么A.jsp中若出现了异常,会跳转到examError.jsp中处理。而在跳转到examError.jsp时,若过滤器配置了ERRORdispather那么则会拦截,否则不会拦截。

分享到:
评论

相关推荐

    myAutoLoginWeb.rar JavaWeb-过滤器Filter学习(三)实现用户的自动登录与IP黑名单过滤

    JavaWeb-过滤器Filter学习(三)实现用户的自动登录与IP黑名单过滤JavaWeb-过滤器Filter学习(三)实现用户的自动登录与IP黑名单过滤JavaWeb-过滤器Filter学习(三)实现用户的自动登录与IP黑名单过滤JavaWeb-过滤器Filter...

    JavaWeb中过滤器的三个小案例

    本文将详细讲解三个使用JavaWeb过滤器的实际案例,帮助开发者深入理解其功能和应用场景。 案例1:分IP统计网站的访问次数 在网站运营中,了解用户访问来源是至关重要的。通过实现一个过滤器,我们可以记录每个IP...

    Javaweb过滤器.zip

    JavaWeb过滤器(Filter)是Servlet规范的一部分,它允许开发者在请求到达目标资源(如Servlet、JSP页面)之前对其进行预处理,或者在响应返回给客户端之后进行后处理。过滤器可以用来实现统一的功能,如登录检查、...

    javaweb过滤器

    ### JavaWeb过滤器详解 #### 过滤器概述 在JavaWeb开发中,过滤器扮演着极其重要的角色,它能够实现在请求到达目标资源(如Servlet或JSP页面)之前或者响应返回客户端之前的拦截功能。这类似于现实生活中大厦里的...

    javaweb中文过滤器

    首先,让我们了解过滤器(Filter)在JavaWeb中的概念。在Servlet规范中,过滤器是实现动态网页请求处理链路中的一个组件。它可以对请求和响应进行预处理和后处理,比如认证、授权、数据转换等。`javax.servlet....

    JavaWeb页面过滤器之编码过滤

    在给定的标题“JavaWeb页面过滤器之编码过滤”和描述中,我们可以深入探讨JavaWeb中的编码过滤器,以及如何在MyEclipse 8.5环境下开发和应用这样的过滤器。这个过滤器不仅适用于JSP页面,也适用于Servlet和HTML等Web...

    JAVAWEB-19:JDBC之过滤器Filter

    在标题"JAVAWEB-19:JDBC之过滤器Filter"中,我们关注的是如何利用过滤器来优化JDBC操作。JDBC(Java Database Connectivity)是Java语言中访问数据库的标准API,它允许Java程序与各种类型的数据库进行交互。然而,...

    myFilterDemoWeb.zip JavaWeb-过滤器Filter学习(二)设置全站编码与设置页面缓存

    myFilterDemoWeb.zip JavaWeb-过滤器Filter学习(二)设置全站编码与设置页面缓存

    javaweb 监听器(Listener)和过滤器(Filter)

    javaweb 监听器(Listener)和过滤器(Filter)

    北京动力节点-专题06-过滤器.pdf

    【JavaWeb过滤器Filter详解】 过滤器(Filter)是JavaWeb开发中不可或缺的一部分,它遵循Servlet规范,提供了在请求处理前后的拦截能力。本专题主要围绕Filter的基础知识展开,包括其生命周期、特性、FilterConfig...

    JavaWeb Servlet中Filter过滤器的详解

    JavaWeb Servlet中Filter过滤器的详解 1.简述  Filter过滤器,对web服务器所有web资源进行过滤,从而实现一些特殊的功能(权限访问控制、过滤敏感词汇、压缩响应信息)。Filter能够对Servlet容器的请求和响应进行检查...

    javaweb中Filter(过滤器)的常见应用

    在Java Web开发中,Filter(过滤器)是一个强大的工具,它可以拦截HTTP请求和响应,对数据进行预处理或后处理,以实现各种功能。本文将深入探讨javaweb中Filter的常见应用,以及如何解决全站字符编码问题。 首先,...

    javaweb_高级_过滤器_监听器

    在JavaWeb开发中,过滤器(Filter)和监听器(Listener)是两种非常重要的组件,它们能够帮助我们实现更精细的控制和管理应用程序的行为。本篇将详细介绍过滤器的原理、使用方法、映射配置以及实际应用案例。 ### 1...

    JavaWeb乱码过滤器.zip

    character-encoding-filter 是 Java Web 乱码过滤器。 web.xml &lt;filter&gt;  &lt;filter-name&gt;character-encoding-filter&lt;/filter-name&gt;  &lt;filter-class&gt;...

    javaWeb实现的过滤器敏感字过滤

    综上所述,"javaWeb实现的过滤器敏感字过滤"项目通过使用JavaWeb过滤器技术,有效地防止了敏感字符的传播,提高了应用程序的安全性。通过不断学习和实践,我们可以更好地掌握这一技能,为构建更安全、可靠的Web应用...

    javaWeb项目 filter练习

    在JavaWeb开发中,过滤器(Filter)是一个重要的概念,它允许我们在请求被发送到目标资源(如Servlet、JSP页面)之前或之后对请求进行处理。本项目"javaWeb项目 filter练习"主要关注了两个核心的应用场景:编码过滤...

    javaweb中的过滤器.doc

    在JavaWeb开发中,过滤器(Filter)是一个至关重要的组件,它是JavaWeb三大核心组件(Servlet、Filter、Listener)之一。过滤器的主要作用是拦截用户的请求,并在请求到达目标Servlet之前进行预处理,或者在响应返回...

    JavaWeb开发几个常用的过滤器源码

    在JavaWeb开发中,过滤器(Filter)是一个非常重要的组件,它允许我们在HTTP请求和响应之间进行拦截,执行一些预处理或后处理操作。这里我们将深入探讨标题中提到的几个常用的过滤器及其源码实现。 首先,我们来看...

    javaweb中Filter(过滤器)的常见应用.docx

    ### JavaWeb中Filter(过滤器)的常见应用 #### 一、概述 在JavaWeb开发中,`Filter`(过滤器)是一种非常重要的组件,它主要用于对用户请求进行预处理或者对响应结果进行后处理。通过合理的配置和设计,开发者...

Global site tag (gtag.js) - Google Analytics