栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

过滤器链配置

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

过滤器链配置

        定义:在一个 Web 应用程序中可以注册多个 Filter 程序,每个 Filter 程序都可以针对某一个 URL 进行拦截。如果多个 Filter 程序都对同一个 URL 进行拦截,那么这些 Filter 就会组成一个Filter 链(也称过滤器链)。

        Filter 链用 FilterChain 对象表示,FilterChain 对象中有一个 doFilter() 方法,该方法的作用是让 Filter 链上的当前过滤器放行,使请求进入下一个 Filter。

步骤 1、创建过滤器

在 filterDemo01 项目的 com.mengma.filter 包中新建两个过滤器 MyFilter01 和 MyFilter02,如 MyFilter01 和 MyFilter02 所示。

MyFilter01

package com.mengma.filter;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class MyFilter01 implements Filter {

    public void init(FilterConfig fConfig) throws ServletException {
        // 过滤器对象在初始化时调用,可以配置一些初始化参数
    }

    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        // 用于拦截用户的请求,如果和当前过滤器的拦截路径匹配,则该方法会被调用
        PrintWriter out = response.getWriter();
        out.write("MyFilter01
"); chain.doFilter(request, response); } public void destroy() { // 过滤器对象在销毁时自动调用,释放资源 } }

MyFilter02

package com.mengma.filter;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class MyFilter02 implements Filter {

    public void init(FilterConfig fConfig) throws ServletException {
        // 过滤器对象在初始化时调用,可以配置一些初始化参数
    }

    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        // 用于拦截用户的请求,如果和当前过滤器的拦截路径匹配,则该方法会被调用
        PrintWriter out = response.getWriter();
        out.write("MyFilter02 Before
"); chain.doFilter(request, response); out.write("
MyFilter02 After
"); } public void destroy() { // 过滤器对象在销毁时自动调用,释放资源 } }
2、修改 web.xml

为了防止其他过滤器影响此次 Filter 链的演示效果,需要先将 web.xml 文件中的其他过滤器的配置信息注释掉,然后将 MyFilter01 和 MyFilter02 过滤器的映射信息配置在 MyServlet 配置信息前面,具体如下所示。



    
        MyFilter01
        com.mengma.filter.MyFilter01
    
    
        MyFilter01
        /MyServlet
    
    
        MyFilter02
        com.mengma.filter.MyFilter02
    
    
        MyFilter02
        /MyServlet
    
    
        MyServlet
        com.mengma.filter.MyServlet
    
    
        MyServlet
        /MyServlet
    
3、运行项目并查看结果

        启动 Tomcat 服务器,在浏览器的地址栏中输入 http://localhost:8080/filterDemo01/MyServlet

        MyServlet 首先被 MyFilter01 拦截了,显示出 MyFilter01 中的内容,然后被 MyFilter02 拦截,直到 MyServlet 被 MyFilter02 放行后,浏览器才显示出 MyServlet 中的输出内容。

        需要注意的是,Filter 链中各个 Filter 的拦截顺序与它们在 web.xml 文件中 元素的映射顺序一致,由于 MyFilter01 的 元素位于 MyFilter02 的 元素前面,因此,用户的访问请求首先会被 MyFilter01 拦截,然后再被 MyFilter02 拦截。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/925219.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号