總結以下: java
1. 自定義的PermissionURLFilter 的 filter-mapping 中必須配置(這個配置是決定性的,若是不配置確定獲取不到): web
<dispatcher>REQUEST</dispatcher> 和 <dispatcher>FORWARD</dispatcher> app
2. 自定義Filter的 filter-mapping 必須配置在 urlrewrite Filter 的 filter-mapping 以後,若是配置在以前,會多攔截一次不是咱們想要的URI,以下: jsp
a. 配置在以前,打印System.out.println( request.getRequestURI +" # "+ request.getAttribute("javax.servlet.forward.request_uri") ); 結果以下(攔截了2次,第一次不是我想要的結果,第2個纔是): url
/testurlrewrite/user/20_e11a9de23afd9 # null spa
/testurlrewrite/user/user.jsp # /testurlrewrite/user/20_e11a9de23afd9 code
b.配置在以後,打印以下(只攔截一次,並且是我想要的結果): xml
/testurlrewrite/user/user.jsp # /testurlrewrite/user/20_e11a9de23afd9 get
3. 新的web.xml的配置以下: servlet
<!-- 這裏配置的是 urlrewrite的 Filter org.tuckey.web.filters.urlrewrite.UrlRewriteFilter --> <filter> <filter-name>URLRewriteFilter</filter-name> <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> </filter> <filter-mapping> <filter-name>URLRewriteFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 配置自定義的Filter --> <filter> <filter-name>PermissionFilter</filter-name> <filter-class>com.my.filters.PermissionURLFilter</filter-class> </filter> <!-- 自定義的 filter-mapping 要在 URLRewrite 的filter-mapping 以後 --> <filter-mapping> <filter-name>PermissionFilter</filter-name> <url-pattern>/*</url-pattern> <!-- ***** 下面必需要配置 ***** --> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping>