If we define Servlet filters in web.xml, then the order of execution of the filters will be the same as the order in which they are defined in the web.xml.
But, if we define the filters using annotation, what is the order of execution of filters and how can we determine the order of execution?
You can indeed not define the filter execution order using @WebFilter
annotation.
However, to minimize the web.xml
usage, it‘s sufficient
to annotate all filters with just a filterName
so that
you don‘t need the <filter>
definition, but just
a <filter-mapping>
definition in the desired
order.
For example,
@WebFilter(filterName="filter1")publicclassFilter1implementsFilter{}@WebFilter(filterName="filter2")publicclassFilter2implementsFilter{}
with in web.xml
just this:
<filter-mapping><filter-name>filter1</filter-name><url-pattern>/url1/*</url-pattern></filter-mapping><filter-mapping><filter-name>filter2</filter-name><url-pattern>/url2/*</url-pattern></filter-mapping>
If you‘d like to keep the URL pattern in @WebFilter
, then
you can just do like so,
@WebFilter(filterName="filter1", urlPatterns="/url1/*")publicclassFilter1implementsFilter{}@WebFilter(filterName="filter2", urlPatterns="/url2/*")publicclassFilter2implementsFilter{}
but you should still keep
the <url-pattern>
in web.xml
,
because it‘s required as per XSD, although it can be empty:
<filter-mapping><filter-name>filter1</filter-name><url-pattern/></filter-mapping><filter-mapping><filter-name>filter2</filter-name><url-pattern/></filter-mapping>
Regardless of the approach, this all will fail in Tomcat until version 7.0.28
because it chokes on presence
of <filter-mapping>
without <filter>
.
See also Using
Tomcat, @WebFilter doesn‘t work with <filter-mapping> inside
web.xml
How to define Servlet filter order of execution using annotations,布布扣,bubuko.com
How to define Servlet filter order of execution using annotations
原文地址:http://www.cnblogs.com/reynold-lei/p/3731332.html