9.2 Filter配置
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章“部署”中讨论。