Servlet 3.0 之@WebFilter怎么控制多個filter的執行順序


 之前我們控制多個filter的執行順序是通過web.xml中控制filter的位置來控制的,放在上面的會比放在下面的先執行,如下“用戶登錄檢查過濾器”會比“接口日志過濾器”先執行

    <!-- 用戶登錄檢測過濾器 -->
    <filter> <filter-name>UserLoginFilter</filter-name>
         <filter-class>net.tfgzs.demo.filter.UserLoginFilter</filter-class>
    </filter>
    <filter-mapping>
         <filter-name>UserLoginFilter</filter-name>
         <url-pattern>/*</url-pattern>
    </filter-mapping>

<!--
接口日志過濾器--> <filter> <filter-name>ApiLog</filter-name> <filter-class>net.tfgzs.demo.filter.ApiLog</filter-class> </filter> <filter-mapping> <filter-name>ApiLog</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

但是當我們使用@WebFilter注解的時候發現注解里面沒有提供可以控制執行順序的參數

     @WebFilter 的屬性
屬性名 類型 描述
filterName String 指定過濾器的 name 屬性,等價於 <filter-name>
value String[] 該屬性等價於 urlPatterns 屬性。但是兩者不應該同時使用。
urlPatterns String[] 指定一組過濾器的 URL 匹配模式。等價於 <url-pattern> 標簽。
servletNames String[] 指定過濾器將應用於哪些 Servlet。取值是 @WebServlet 中的 name 屬性的取值,或者是 web.xml 中 <servlet-name> 的取值。
dispatcherTypes DispatcherType 指定過濾器的轉發模式。具體取值包括: ASYNC、ERROR、FORWARD、INCLUDE、REQUEST。
initParams WebInitParam[] 指定一組過濾器初始化參數,等價於 <init-param> 標簽。
asyncSupported boolean 聲明過濾器是否支持異步操作模式,等價於 <async-supported> 標簽。
description String 該過濾器的描述信息,等價於 <description> 標簽。
displayName String 該過濾器的顯示名,通常配合工具使用,等價於 <display-name> 標簽。

 

通過實踐發現如果想要控制filer的執行順序可以通過控制filter的文件名來控制

比如:

       UserLoginFilter.java 和 ApiLog.java 這兩個文件里面分別是“用戶登錄檢查過濾器”和“接口日志過濾器”,因為這兩個文件的首字母A排U之前,導致每次執行的時候都是先執行“接口日志過濾器”再執行“用戶登錄檢查過濾器”,所以我們現在修改兩個文件的名稱分別為

Filter0_UserLogin.java

Filter1_ApiLog.java

這樣就能先執行“用戶登錄檢查過濾器”再執行“接口日志過濾器”

 

本文出自 “騰飛工作室” 博客,請務必保留此出處  http://www.cnblogs.com/tfgzs/p/4571137.html  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM