Filter 的应用场景、Filter 的目标资源、小结| 学习笔记

简介: 快速学习 Filte r的应用场景、Filter 的目标资源、小结。

开发者学堂课程【Filte(过滤器)、Listener(监听器):Filter 的应用场景、Filter 的目标资源、小结】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/38/detail/878


Filter 的应用场景、Filter 的目标资源、小结


内容介绍

一、过滤器的应用场景。

二、案例分类。

三、设置目标资源。

四、Filter mapping 的子元素。

五、Filter小结。


一、过滤器的应用场景。

1、执行目标资源之前做预处理工作,例如设置编码,这种试通常都会放行 ,只是在目标资源执行之前做一些准备工作。

(批注:几乎所有的 Servlet 中都需要写request.setCharacterEndoing()可以把它写到一个Filter中。)

过滤器不会做拦截操作,只是设置编码。)

2、通过条件判断是否放行,例如校验当前用户是否已经登录,或者用户IP是否已经被禁用。(有拦截操作,判断Id是否在禁用区域。)

3、在目标资源执行后,做一些后续的特殊处理工作,例如把目标资源输出的数据进行处理。(批注:回程拦截!)

二、案例分类。

1、分IP统计访问次数:第一种预处理。

2、粗粒度权限控制:资源分为三个等级。如在淘宝中,为游客、会员、管理员,可以访问商品不可查询订单为游客等级,既可以访问商品又可查询订单的为会员等级,可以调价格的为管理员等级。

这属于第二种通过条件判断。

3、解决全站字符乱码:第一种预处理 。

4、页面静态化:第三种回程拦截,做后续处理。


三、设置目标资源。

在web.xml文件中部署Fiter时, 可以通过“*”来执行目标资源:

这一特性与Servlet完全相同!通过这一特性,我们可以在用户访问敏感资源时,执行过滤器,例如:admin/*可以把所有管理员才能访问的资源放到/admin路径下,这时可以通过过滤器来校验用户身份。

还可以为filter-mapping〉指定目标资源为某个Servlet,例如

< filter-mapping>

myfilter

/*


批注:/*表示过滤所有资源

< servlet>

< servlet-name>myservlet

< servlet-class> cn.itcast.servlet.MyServlet



< servlet-name>myservlet< servlet-name>

/abc>

< sevlet-mapping>


> myfilter< /filter-name>

< filter-class>cn.itcaat. filter.MyFilterilter-class>


< filter-mapping>

myfilter'

<servlet-name > myservlet servlet-name)

mapping>

批注: <servlet-name > myservlet servlet-name)

这里没有指定< url-patter>,而是指定< server-name>!注意,它与某个 servlet 的配置名称相同!

当用户访问http: localhost:8080/filtertest/abc时,会执行名字为 myservlet 的servlet ,这时会执行过滤器。

注:serlet-name 指定方式可以有多个。


四、Filter-mapping 的子元素。

五、Filter 小结。

1、filter 的三个方法。

①void init (filterConfig):在 Tomcat 启动时被调用;

②void destroy(): 在 Tomcat 关闭时被调用;

③void doFitertServletRequest,ServletResponse,FterChain):每次有请求时都调用该方法。

2、FilterConfig类: 与 ServletConfig 相似,用来获取 Fiter 的初始化参数。

①ServletContext getServletContext(): 获取 ServletContext 的方法;

②String getFiterName):获取 Fiter 的配置名称;

③string getnitParametert(string name):获取Fiter的初始化配置,与〈init-param〉元素对应;

④Enumeration getinitParameterNames(): 获取所有初始化参数的名称。

3、FRerChain 类

void doFiter(ServletRequest,ServletResponse):放行!表示执行下一个过滤器,或者执行目标资源,可以在调用 FiltetChain 的 doFiter()方法的前后添加语句,在FilterChain的dofiter()方法之后的语句会在目标资源执行之后执行。

4、四种拦截方式 :REQUEST,FORWARD,INCLUDE,ERROR,默认是 REQUEST 方式。

①REQUEST:拦截直接请求方式;

②FORWARD:拦截请求转发方式 ;

③INCLUDE:拦截请求包含方式;

④ERROR:拦截错误转发方式。





            </div>
相关文章
|
4月前
|
搜索推荐 UED Python
动态多条件查询:理解`filter_by`与`filter`提升Web应用搜索功能
通过深入理解filter_by与filter的异同,并结合使用它们,我们可以构建一个既灵活又强大的动态多条件查询系统。这不仅提升了Web应用的搜索功能,也为用户提供了更加个性化的搜索体验。希望本文能够启发你在自己项目中实现类似的功能,以满足用户多变的搜索需求。
|
XML Java 应用服务中间件
Filter 过滤器--基本原理--Filter 过滤器生命周期--过滤器链--注意事项和细节--全部应用实例--综合代码示例
Filter 过滤器--基本原理--Filter 过滤器生命周期--过滤器链--注意事项和细节--全部应用实例--综合代码示例
166 0
Filter过滤器概念及生命周期
Filter过滤器概念及生命周期
155 0
|
Java
filter是如何工作的?
Filter是Web.xml中一个常用的配置,可以通过<filter>和<filter-mapping>组合起来使用Filter。
53 0
|
Java
Filter概述、接口及配置
Filter概述、接口及配置
10768 0
|
Java 应用服务中间件 Spring
自定义Filter后,我的业务代码怎么被执行了多次?
若要求构建的过滤器针对全局路径有效,且无任何特殊需求(主要针对 Servlet 3.0 的一些异步特性),则完全可直接使用 Filter 接口(或继承 Spring 对 Filter 接口的包装类 OncePerRequestFilter),并使用**@Component** 将其包装为 Spring 中的普通 Bean,也可达到预期需求。
162 0
|
存储 缓存 算法
比Bloom Filter节省25%空间!Ribbon Filter在Lindorm中的应用
本文研究了一种新的过滤器Ribbon Filter,并将其集成到Lindorm中
45259 11
比Bloom Filter节省25%空间!Ribbon Filter在Lindorm中的应用
|
Scala 开发者
集合过滤 Filter 操作 | 学习笔记
快速学习集合过滤 Filter 操作
|
SQL 开发框架 数据处理
OR-Mapping 设计改进(数据增加改进) | 学习笔记
简介:快速学习 OR-Mapping 设计改进(数据增加改进)
107 0
|
SQL 移动开发 开发者
OR-Mapping 设计改进(查询全部改进) | 学习笔记
简介:快速学习 OR-Mapping 设计改进(查询全部改进)