Java web.xml筛选器链序列
我需要帮助找出为什么我的过滤器以这种方式链接到*.jsf请求: filter1->filter3->filter2 对于*.jsp请求(所需链),采用这种方式: filter1->filter2->filter3Java web.xml筛选器链序列,java,servlets,servlet-filters,Java,Servlets,Servlet Filters,我需要帮助找出为什么我的过滤器以这种方式链接到*.jsf请求: filter1->filter3->filter2 对于*.jsp请求(所需链),采用这种方式: filter1->filter2->filter3 <filter> <display-name>filter1</display-name> <filter-name>filter1</filter-name> <filter-class>
<filter>
<display-name>filter1</display-name>
<filter-name>filter1</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter>
<display-name>filter2</display-name>
<filter-name>filter2</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter>
<display-name>filter3</display-name>
<filter-name>filter3</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern>*.jsf</url-pattern>
<url-pattern>*.jsp</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<filter-mapping>
<filter-name>filter2</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>REQUEST</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>filter2</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>filter3</filter-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.jsf</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
过滤器1
过滤器1
org.springframework.web.filter.DelegatingFilterProxy
过滤器2
过滤器2
org.springframework.web.filter.DelegatingFilterProxy
过滤器3
过滤器3
org.springframework.web.filter.DelegatingFilterProxy
过滤器1
*.jsf
*.jsp
要求
Facesservlet
*.jsf
过滤器2
Facesservlet
向前地
包括
要求
错误
过滤器2
*.jsp
过滤器3
*.jsp
*.jsf
要求
最初的问题是由优先于Faces servlet的过滤器引起的。尽管filter2是一个过滤器,但它也与FacesServlet关联,因此在所有其他过滤器之后执行。为了抵消这一点,我将FacesServlet与我的链的最后一个过滤器filter3相关联
通过以下映射,.jsp和.jsf现在都按所需顺序执行:filter1->filter2->filter3
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern>*.jsf</url-pattern>
<url-pattern>*.jsp</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>filter2</filter-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.jsf</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>filter3</filter-name>
<url-pattern>*.jsp</url-pattern> <!-- only .jsp since .jsf will be picked up by faces servlet/filter combo -->
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<filter-mapping> <!-- this gets picked up last because of filter vs. servlet precedence, not because of position in web.xml -->
<filter-name>filter3</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>REQUEST</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
过滤器1
*.jsf
*.jsp
要求
过滤器2
*.jsp
*.jsf
过滤器3
*.jsp
要求
Facesservlet
*.jsf
过滤器3
Facesservlet
向前地
包括
要求
错误
这可能是因为过滤器映射的*.jsf优先于servlet映射的*.jsf。可惜servlet 2.5中没有