Java拦截过滤器模式

x33g5p2x  于2021-09-30 转载在 Java  
字(2.3k)|赞(0)|评价(0)|浏览(495)

Java拦截过滤器模式

拦截过滤器模式(Intercepting Filter Pattern)用于对应用程序的请求或响应做一些预处理/后处理。定义过滤器,并在把请求传给实际目标应用程序之前应用在请求上。过滤器可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序。以下是这种设计模式的实体。

  • 过滤器(Filter) - 过滤器在请求处理程序执行请求之前或之后,执行某些任务。
  • 过滤器链(Filter Chain) - 过滤器链带有多个过滤器,并在 Target 上按照定义的顺序执行这些过滤器。
  • Target - Target 对象是请求处理程序。
  • 过滤管理器(Filter Manager) - 过滤管理器管理过滤器和过滤器链。
  • 客户端(Client) - Client 是向 Target 对象发送请求的对象。

在之前我们以及学习了java过滤器模式 那么和java拦截过滤器模式有什么区别呢?

java过滤器模式可以在任何地方 都能实现过滤

我们在Spring中使用的过滤器 使用的就是这种模式

而java拦截过滤器模式 一般只作用请求过滤

而且我们在SpringMVC拦截器 使用的就是这种模式

我们只是把结构 搭建出来了 具体怎么拦截那么就需要 更具事件情况了

创建过滤接口 Filter。

  1. //过滤接口
  2. public interface Filter {
  3. public void execute(String request);
  4. }

创建实体过滤器零件。

  1. // 过滤 条件
  2. public class AuthenticationFilter implements Filter {
  3. public void execute(String request){
  4. System.out.println("身份验证请求: " + request);
  5. }
  6. }
  1. // 过滤 条件
  2. public class DebugFilter implements Filter {
  3. public void execute(String request){
  4. System.out.println("请求 log: " + request);
  5. }
  6. }

创建 Target。 (请求)

  1. //请求
  2. public class Target {
  3. public void execute(String request){
  4. System.out.println("执行请求: " + request);
  5. }
  6. }

创建 过滤器

  1. //将滤零件组装成过滤器
  2. public class FilterChain {
  3. private List<Filter> filters = new ArrayList<Filter>();
  4. private Target target;
  5. public void addFilter(Filter filter){
  6. filters.add(filter);
  7. }
  8. public void execute(String request){
  9. for (Filter filter : filters) {
  10. filter.execute(request);
  11. }
  12. //等过滤完后执行请求
  13. target.execute(request);
  14. }
  15. public void setTarget(Target target){
  16. this.target = target;
  17. }
  18. }

创建过滤管理器

  1. //管理 过滤器
  2. public class FilterManager {
  3. FilterChain filterChain;
  4. public FilterManager(Target target){
  5. filterChain = new FilterChain();
  6. filterChain.setTarget(target);
  7. }
  8. public void setFilter(Filter filter){
  9. filterChain.addFilter(filter);
  10. }
  11. //过滤请求
  12. public void filterRequest(String request){
  13. filterChain.execute(request);
  14. }
  15. }

创建客户端 Client

  1. //客户端
  2. public class Client {
  3. FilterManager filterManager;
  4. //装载过滤器
  5. public void setFilterManager(FilterManager filterManager){
  6. this.filterManager = filterManager;
  7. }
  8. //将请求 传入过滤器
  9. public void sendRequest(String request){
  10. filterManager.filterRequest(request);
  11. }
  12. }

使用 Client 来演示拦截过滤器设计模式。

  1. public class InterceptingFilterDemo {
  2. public static void main(String[] args) {
  3. //添加请求
  4. FilterManager filterManager = new FilterManager(new Target());
  5. //添加过滤内容
  6. filterManager.setFilter(new AuthenticationFilter());
  7. filterManager.setFilter(new DebugFilter());
  8. //客户端
  9. Client client = new Client();
  10. //将拦截过滤装器 装载
  11. client.setFilterManager(filterManager);
  12. //执行 请求 开始过滤
  13. client.sendRequest("HOME");
  14. }
  15. }

身份验证请求: HOME
请求 log: HOME
执行请求: HOME

相关文章

最新文章

更多