|
|
Intercepting Filter Pattern
|
Define
Intercepting Filter Pattern
|
A pluggable component design to
intercept incomming requests and outgoing responses, provide common
services in a standard manner (independently) without changing core
processing code.
|
Where
to use & benefits
|
Logging and authentication.
Enhance security.
Add additional function to existing web application.
Decorate main process.
Debug.
Pre-processing or post-processing for specific clients.
Uncompress incoming request.
Convert input encoding schema.
Being added or removed transparently or declaratively and triggered
automatically
Improve reusability
Deployment-time composability
Each filter is loosely coupled
Inefficient for information sharing.
Related patterns include
- Front Control better suited to handling core processing.
- Template good for template filter strategy
- Decorator providing for dynamically pluggable wrappers.
|
|
| Example
Intercepting Filter
Pattern |
To create a basic filter, you
need to:
implement Filter interface
implement doFilter method
call doFilter from FilterChain object
register the filter with the appropriate servlets and JSP pages
Mapping the filter to specific pages
disable the invoker servlet
General skeleton program
import javax.servlet.*;
import javax.servlet.http.*;
public class MyFilter implements Filter {
public void doFilter(ServletRequest request,
ServletResponse resonse,
FilterChain chain)
throws ServletException, IOException {
//work on request and
response
chain.doFilter(request,
response);
}
public void init(FilterConfig config) throws
ServletException {
//work on config
}
public void destroy() {
//work on clean up
}
}
Register and filter mapping
//in web.xml file
<web-app>
...
Before the servlet description
<filter>
<filter-name>MyFilter</filter-name>
<display-name>MyCoolFilter</display-name>
<description>This is
my cool filter</description>
<filter-class>somePackage.MyFilter</filter-class>
<init-param>
<param-name>yyy</param-name>
<param-value>/xxx/zzz</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/xxx.jsp</url-pattern>
</filter-mapping>
<!-- also apply to another servlet -->
<filter-mapping>
<filter-name>MyFilter</filter-name>
<servlet-name>xxx</servlet-name>
</filter-mapping>
...
</web-app>
You may use filter mapping and servlet mapping in web.xml file to
diable the invoker servlet to apply the filter.
|
|
|