首页 > 其他分享 >过滤器设计模式

过滤器设计模式

时间:2022-11-02 07:33:05浏览次数:70  
标签:HttpServletRequest chain doFilter 过滤器 设计模式 public FilterChain

过滤器设计模式:按照指定的顺序进行过滤,由一个过滤器链接口,一个起切换作用的过滤器链接口实现类,若干个过滤器链接口实现类,一个过滤器链适配器类组成。

过滤器链接口:

package com.example.ssm.filter;

import javax.servlet.http.HttpServletRequest;

/**
 * 过滤器链接口
 */
public interface FilterChain {
    void doFilter(HttpServletRequest request, FilterChain chain);
}

 

起切换作用的过滤器链接口实现类:

package com.example.ssm.filter;

import com.google.common.collect.Lists;
import org.springframework.util.CollectionUtils;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * 主过滤器链,起衔接作用
 */
public class MainChain implements FilterChain {

    private List<FilterChain> filterChains = Lists.newArrayList();

    private int index = 0;

    @Override
    public void doFilter(HttpServletRequest request, FilterChain chain) {
        if (CollectionUtils.isEmpty(filterChains)) {
            return;
        }
        FilterChain filterChain = filterChains.get(index++);
        filterChain.doFilter(request, chain);
    }

    public void addFilter(FilterChain chain) {
        filterChains.add(chain);
    }
}

 

若干个过滤器链实现类:

package com.example.ssm.filter;

import javax.servlet.http.HttpServletRequest;

/**
 * 第一个过滤器链
 */
public class FirstChain implements FilterChain {
    @Override
    public void doFilter(HttpServletRequest request, FilterChain chain) {
        System.out.println("first step");
        chain.doFilter(request,chain);
        System.out.println("five step");
    }
}

 

package com.example.ssm.filter;

import javax.servlet.http.HttpServletRequest;

/**
 * 第二个过滤器链
 */
public class TwoChain implements FilterChain {
    @Override
    public void doFilter(HttpServletRequest request, FilterChain chain) {
        System.out.println("two step");
        chain.doFilter(request,chain);
        System.out.println("four step");
    }
}

 

package com.example.ssm.filter;

import javax.servlet.http.HttpServletRequest;

/**
 * 第三个过滤器链
 * 最后的过滤器链类中doFilter方法里不要调用chain.doFilter方法
 */
public class ThreeChain implements FilterChain {

    @Override
    public void doFilter(HttpServletRequest request, FilterChain chain) {
        System.out.println("Three step");
    }
}

 

过滤器链适配器类:

package com.example.ssm.filter;

/**
 * 过滤器链适配器
 */
public class Adapter {

    private void executeChain() {
        MainChain mainChain = new MainChain();
        mainChain.addFilter(new FirstChain());
        mainChain.addFilter(new TwoChain());
        mainChain.addFilter(new ThreeChain());
        System.out.println("过滤器执行开始");
        mainChain.doFilter(null, mainChain);
        System.out.println("过滤器执行结束");
    }

    public static void main(String[] args) {
        new Adapter().executeChain();
    }
}

 

程序运行结果:

过滤器执行开始
first step
two step
Three step
four step
five step
过滤器执行结束

 

标签:HttpServletRequest,chain,doFilter,过滤器,设计模式,public,FilterChain
From: https://www.cnblogs.com/lirun/p/16849765.html

相关文章

  • 浅谈PHP设计模式的装饰器模式
    简介装饰器模式又叫做装饰者模式,属于结构型的设计模式。指的是在不改变原类文件和使用继承的情况下动态扩展这个对象的功能,从而修饰源数据。组成:抽象构件(Component)角色......
  • 快速了解Java设计模式
    背景Java二十三种设计模式的简单介绍,目的是能看懂别人写的设计模式代码,且能应用常用的设计模式。设计模式分类创建型模式工厂方法(Factory)工厂模式分为三种:简单工厂(不......
  • SpringBoot 过滤器和拦截器
    过滤器实现过滤器需要实现javax.servlet.Filter接口。重写三个方法。其中init()方法在服务启动时执行,destroy()在服务停止之前执行。可用两种方式注册过滤器:使用......
  • .net 6 在异常过滤器中记录post参数 EnableBuffering
    在请求到达过滤器时Steam已经被读取了,此时我们在过滤器中使用EnableBuffering并没有起作用,还需要在中间件里使用EnableBuffering在.net6有一些稍微的不同1.在program......
  • 设计模式再总结
    1.类之间的关系(uml类图)依赖(方法引用)、关联(聚合、组合)、继承泛化、接口实现2.设计模式的原则单一原则、接口隔离、依赖|关联倒转、里氏替换、开闭原则、迪米特原则、合成......
  • C#设计模式(23种设计模式)
    创建型模式:单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。原型(Prototype)模式:将一个对象作为原型,通过对其进......
  • 设计模式-模板模式在Java中的使用示例
    场景模板模式模板模式又叫模板方法模式(TemplateMethodPattern),是指定义一个算法的骨架,并允许子类为一个或者多个步骤提供实现。模板模式使得子类可以在不改变算法......
  • 设计模式之享元模式
    概述当一个软件系统在运行时产生的对象数量太多,将导致运行代价过高,带来系统性能下降等问题。例如,在一个文本字符串中存在很多重复的字符,如果每一个字符都用一个单独的对象......
  • 设计模式
    单例模式所谓单例模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)饿汉式(静态常量)构......
  • 9 设计模式-装饰者模式(decorator)
    装饰者模式(decorator)装饰者模式又称为包装模式(Wrapper),作用是用来动态的为一个对象增加新的功能。装饰模式是一种用于代替继承的技术,无须通过继承增加子类就能扩展对......