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>
相关文章
|
3月前
|
Python
通过 type 和 object 之间的关联,进一步分析类型对象
通过 type 和 object 之间的关联,进一步分析类型对象
69 3
|
5月前
|
安全 API 数据库
深入剖析Entity Framework Core中的查询过滤器:实现细粒度数据访问控制的全方位指南与实战代码示例
【8月更文挑战第31天】本文通过实例详细介绍了如何在Entity Framework Core中使用查询过滤器实现细粒度的数据访问控制。从创建基于EF Core的项目、配置数据库上下文到定义领域模型,逐步展示了查询过滤器的应用方法。通过具体代码示例,说明了如何设置全局过滤规则及在不同场景下关闭过滤器,以执行特定查询。此外,还探讨了如何结合用户身份验证和授权,实现基于角色的数据访问控制,确保数据安全性。通过这些步骤,帮助开发者构建高效且安全的数据库访问层。
52 0
|
6月前
|
搜索推荐 UED Python
动态多条件查询:理解`filter_by`与`filter`提升Web应用搜索功能
通过深入理解filter_by与filter的异同,并结合使用它们,我们可以构建一个既灵活又强大的动态多条件查询系统。这不仅提升了Web应用的搜索功能,也为用户提供了更加个性化的搜索体验。希望本文能够启发你在自己项目中实现类似的功能,以满足用户多变的搜索需求。
|
7月前
|
负载均衡 应用服务中间件 API
location` 块的语法、匹配规则、配置示例及其应用场景
location` 块的语法、匹配规则、配置示例及其应用场景
87 2
|
XML Java 应用服务中间件
Filter 过滤器--基本原理--Filter 过滤器生命周期--过滤器链--注意事项和细节--全部应用实例--综合代码示例
Filter 过滤器--基本原理--Filter 过滤器生命周期--过滤器链--注意事项和细节--全部应用实例--综合代码示例
199 0
Filter过滤器概念及生命周期
Filter过滤器概念及生命周期
164 0
|
Java
filter是如何工作的?
Filter是Web.xml中一个常用的配置,可以通过<filter>和<filter-mapping>组合起来使用Filter。
58 0
|
Java 应用服务中间件 Spring
自定义Filter后,我的业务代码怎么被执行了多次?
若要求构建的过滤器针对全局路径有效,且无任何特殊需求(主要针对 Servlet 3.0 的一些异步特性),则完全可直接使用 Filter 接口(或继承 Spring 对 Filter 接口的包装类 OncePerRequestFilter),并使用**@Component** 将其包装为 Spring 中的普通 Bean,也可达到预期需求。
173 0
|
8月前
|
关系型数据库 分布式数据库 PolarDB
使用 PolarDB 开源版 bloom filter index 实现任意字段组合条件过滤
背景PolarDB 的云原生存算分离架构, 具备低廉的数据存储、高效扩展弹性、高速多机并行计算能力、高速数据搜索和处理; PolarDB与计算算法结合, 将实现双剑合璧, 推动业务数据的价值产出, 将数据变成生产力.本文将介绍使用 PolarDB 开源版 bloom filter index 实现任...
145 0
|
存储 SQL 并行计算
使用 PolarDB 开源版 bloom filter index 实现任意字段组合条件过滤
PolarDB 的云原生存算分离架构, 具备低廉的数据存储、高效扩展弹性、高速多机并行计算能力、高速数据搜索和处理; PolarDB与计算算法结合, 将实现双剑合璧, 推动业务数据的价值产出, 将数据变成生产力. 本文将介绍使用 PolarDB 开源版 bloom filter index 实现任意字段组合条件过滤
277 0