`

表示层模式:Intercepting Filter—拦截过滤器模式

阅读更多

Context
        The presentation-tier request handling mechanism receives many different types of
requests, which require varied types of processing. Some requests are simply forwarded to
the appropriate handler component, while other requests must be modified, audited, or
uncompressed before being further processed.
Problem
        Preprocessing and post-processing of a client Web request and response are required.
When a request enters a Web application, it often must pass several entrance tests
prior to the main processing stage. For example,
Has the client been authenticated?
Does the client have a valid session?
Is the client's IP address from a trusted network?
Does the request path violate any constraints?
What encoding does the client use to send the data?
Do we support the browser type of the client?
Some of these checks are tests, resulting in a yes or no answer that determines
whether processing will continue. Other checks manipulate the incoming data stream into a
form suitable for processing.
        The classic solution consists of a series of conditional checks, with any failed check
aborting the request. Nested if/else statements are a standard strategy, but this solution leads
to code fragility and a copy-and-paste style of programming, because the flow of the
filtering and the action of the filters is compiled into the application.
The key to solving this problem in a flexible and unobtrusive manner is to have a
simple mechanism for adding and removing processing components, in which each
component completes a specific filtering action.
Forces
        Common processing, such as checking the data-encoding scheme or logging
information about each request, completes per request.
Centralization of common logic is desired.
Services should be easy to add or remove unobtrusively without affecting existing
components, so that they can be used in a variety of combinations, such as
Logging and authentication
Debugging and transformation of output for a specific client
Uncompressing and converting encoding scheme of input
Solution
        Create pluggable filters to process common services in a standard manner without
requiring changes to core request processing code. The filters intercept incoming requests
and outgoing responses, allowing preprocessing and post-processing. We are able to add
and remove these filters unobtrusively, without requiring changes to our existing code.
We are able, in effect, to decorate our main processing with a variety of common
services, such as security, logging, debugging, and so forth. These filters are components
that are independent of the main application code, and they may be added or removed
declaratively. For example, a deployment configuration file may be modified to set up a
chain of filters. The same configuration file might include a mapping of specific URLs to
this filter chain. When a client requests a resource that matches this configured URL
mapping, the filters in the chain are each processed in order before the requested target
resource is invoked.

分享到:
评论

相关推荐

    Core j2ee Patterns Best Practices And Design Strategies

    - 表示层模式:Intercepting Filter、Front Controller、View Helper等。 - 业务层模式:Business Delegate、Value Object、Session Facade等。 - 集成层模式:Data Access Object、Service Activator等。 这些模式...

    java filter过滤器

    【Java Filter过滤器详解】 Java Filter是Java Servlet技术的一部分,它允许开发者在Servlet容器中对HTTP请求和响应进行拦截处理,实现数据过滤、权限控制、日志记录等多种功能。Filter的生命周期包括三个主要方法...

    filter过滤器的简单使用.rar

    在Java Web开发中,Filter(过滤器)是一个非常重要的组件,它允许我们在HTTP请求和响应之间进行拦截,实现数据预处理、后处理或者修改。在标题提到的"filter过滤器的简单使用.rar"压缩包中,很显然包含了一个关于...

    jsp filter 过滤器判断用户是否登录

    ### JSP Filter 过滤器判断用户是否登录 在Web应用开发中,权限验证是非常重要的一个环节。通过使用过滤器(Filter),可以在请求到达目标资源(如Servlet或JSP页面)之前进行处理,例如实现登录状态检查、权限验证...

    拦截器 FILTER 样例

    ### 拦截器FILTER代码样例解析 #### 一、概述 在Web开发中,拦截器(FILTER)是一种常用的技术手段,它可以在请求被处理之前或之后执行一些操作,如用户验证、日志记录等。本文将通过一个具体的Java Filter实现...

    1道过滤器模式架构风格-课程内容.rar

    过滤器模式,也被称为“Criteria模式”或“多标准选择模式”,是一种设计模式,它允许我们根据多个条件对数据集合进行筛选。这种模式在软件工程中广泛应用,特别是在数据处理、数据库查询以及用户界面的交互中。下面...

    过滤器笔记整理

    - `<filter-mapping>`元素定义了过滤器与哪些URL模式相匹配。 - `/*`表示所有URL都匹配该过滤器。 #### 五、过滤器应用场景 - **编码过滤**:用于解决客户端提交的数据编码问题,确保字符集的一致性。 - **权限...

    Structs2核心过滤器

    这里定义了一个名为“struts2”的过滤器,其类名为`org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter`,这是Struts2框架提供的默认过滤器实现。 #### 2. **配置详解** - **`<filter-name>`...

    jsp filter 过滤器功能与简单用法示例.docx

    在Web应用开发中,过滤器(Filter)是一种重要的组件,它能够动态地拦截客户端请求和服务器响应,在请求到达目标资源(如Servlet或JSP页面)之前进行预处理,或者在响应返回客户端之前进行后处理。本篇文章将详细...

    jsp-14-过滤器

    在Java Web开发中,JSP(JavaServer Pages)是一种用于创建动态网页的技术,而过滤器(Filter)是Servlet规范的一部分,允许我们在请求处理前后插入逻辑,以实现诸如数据验证、字符编码转换、日志记录等功能。...

    Filter-四个有用的Java过滤器

    总结来说,Java过滤器提供了一种灵活的方式,可以在请求到达Servlet之前和响应离开Servlet之后对它们进行拦截和修改,从而增强了Web应用程序的功能和安全性。通过合理利用过滤器,开发者可以实现诸如身份验证、权限...

    设计模式相关资料设计模式相关资料

    - 解释器模式:提供一个解析语言的语法表示。 - 迭代器模式:提供一种方法顺序访问聚合对象的元素,而又不暴露其底层表示。 - 状态模式:允许一个对象在其内部状态改变时改变它的行为。 - 策略模式:定义一组...

    浅谈springMVC拦截器和过滤器总结

    在Spring MVC中,有两种常见的机制可以用来对访问的URL进行拦截处理:拦截器(Interceptor)和过滤器(Filter)。这两者都可以实现预处理和后处理功能,但它们的工作方式和应用场景有所不同。 ### 拦截器...

    基于springboot的过滤器。拦截器,Aspect,定时器

    在Spring Boot应用中,过滤器(Filter)、拦截器(Interceptor)和切面(Aspect)都是实现请求处理逻辑增强的重要手段,而定时任务则用于执行周期性的后台任务。下面将详细介绍这些概念及其用法。 1. **Spring Boot...

    管道过滤器

    管道过滤器(Pipe and Filter)模式是一种经典的软件设计模式,它在Java和其他许多编程语言中广泛应用,尤其是在处理数据流和事件处理系统中。这个模式的主要思想是将复杂的处理任务分解成一系列可重用的过滤器组件...

    在类图中表示装饰器模式:深入解析与代码实现

    在类图中表示装饰器模式有助于我们更好地理解和设计系统。通过上述代码示例和类图,我们展示了如何在类图中表示装饰器模式,并提供了具体的Java代码实现。这种模式在需要灵活扩展功能时非常有用,尤其是在需要保持...

    简单使用Filter模拟Servlet中的过滤器

    这里的`myFilter`是过滤器的名称,`com.example.MyFilter`是Filter实现类的全限定名,`/somePath/*`表示所有以`/somePath/`开头的URL都将被这个过滤器拦截。 Filter的执行顺序是由它们在web.xml中的顺序决定的。...

    Head First设计模式(完整高清版).pdf

    - 迭代器模式:提供一种方法顺序访问聚合对象的元素,而又不暴露其底层表示。 - 状态模式:允许对象在其内部状态改变时改变它的行为。 - 策略模式:定义一系列算法,并将每个算法封装起来,使它们可以互相替换。 ...

    设计模式 23种设计模式PPT

    - 生成器模式:将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。 2. 结构型模式: - 适配器模式:允许两个不兼容的接口协同工作。 - 组合模式:将对象组合成树形结构,以表示部分-整体的...

    jsp中文乱码过滤器

    2. **配置Filter**:在web.xml文件中,我们需要为这个过滤器定义一个唯一的过滤器名称,并指定需要拦截的URL模式。 3. **设置编码**:在`doFilter()`方法中,我们可以使用`HttpServletRequest`的`setCharacter...

Global site tag (gtag.js) - Google Analytics