9.2 Filter配置
当完成Filter
的实现后,就可以开始配置Filter
了Filter
的配置需要如下步骤:
- 确认哪些资源需要使用这个
Filter
拦截处理。 - 配置
Filter
的初始化参数值,这些参数可以在Filter
的init
方法中读取到; - 给
Filter
取一个名称。一般来说,这个名称没有什么特别的含义,但在一些特殊的情况下,这个名字十分有用。例如,要记录Filter
的初始化时间,但这个应用中有许多的Filter
,这时它就可以用来识别Filter
了。
FilterConfig接口
getServletContext方法
FilterConfig
接口允许通过它的getServletContext
的方法来访问ServletContext
:
1 | ServletContext getServletContext() |
getFilterName方法
如果配置了Filter
的名字,在FilterConfig
的getFilterName
中就可以获取Filter
的名字。getFilterName
的定义如下:
1 | java.lang.String getFilterName() |
获取Filter的初始化参数
当然,最重要的还是要获取到开发者或者运维给Filter
配置的初始化参数。为了获取这些初始化参数,需要用到FilterConfig
中的两个方法,第一个方法是getParameterNames
:
1 | java.util.Enumeration<java.lang.String> |
这个方法返回Filter
参数名字的Enumeration
对象。如果没有给这个Filter
配置任何参数,该方法返回的是空的Enumeration
对象。
第二个方法是getParameter:
1 | java.lang.String getInitParameter( |
配置Filter的两种方法
有两种方法可以配置Filter
:一种是通过WebFilter
的Annotation
来配置Filter
,另一种是通过部署描述来注册。
- 使用
@WebFilter
的方法,只需要在Filter
的实现类中增加一个注解即可,不需要重复地配置部署描述。当然,此时要修改配置参数,就需要重新构建Filter
实现类了。 - 使用部署描述意味着修改
Filter
配置只要修改一下文本文件就可以了。
WebFilter的属性
使用@WebFilter
,你需要熟悉表9.1中所列出来的参数,这些参数是在WebFilter
的Annotation
里定义的。所有参数都是可选
的。
属性 | 描述 |
---|---|
asyncSupported |
Filter 是否支持异步操作 |
description |
Filter 的描述 |
dispatcerTypes |
Filter 所生效范围 |
displayName |
Filter 的显示名 |
filterName |
Filter 的名称 |
initParams |
Filter 的初始化参数 |
largeIcon |
Filter 的大图名称 |
servletName |
Filter 所生效的Servlet 名称 |
smallIcon |
Filter 的小图名称 |
urlPatterns |
Filter 所生效的URL 路径 |
value |
Filter 所生效的URL 路径 |
举个例子,下述@WebFilter
标注配置了一个Filter
,该名称为DataCompressionFilter
,且适用于所有资源:
1 | ( |
如果使用部署描述中的filter
、filter-mapping
元素定义,那么它的内容如下:
1 | <filter> |
再举个例子,下述的Filter
配置,描述了两个初始化参数:
1 | ( |
如果使用部署描述中的filter
、filter-mapping
元素,那么该配置应该为:
1 | <filter> |
关于部署描述将在第13章“部署”中讨论。
原文链接: 9.2 Filter配置