之前我們控制多個(gè)filter的執(zhí)行順序是通過web.xml中控制filter的位置來控制的,放在上面的會(huì)比放在下面的先執(zhí)行,如下“用戶登錄檢查過濾器”會(huì)比“接口日志過濾器”先執(zhí)行
<!-- 用戶登錄檢測過濾器 --> <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>
但是當(dāng)我們使用@WebFilter注解的時(shí)候發(fā)現(xiàn)注解里面沒有提供可以控制執(zhí)行順序的參數(shù)
@WebFilter 的屬性| 屬性名 | 類型 | 描述 |
|---|---|---|
| filterName | String | 指定過濾器的 name 屬性,等價(jià)于 <filter-name> |
| value | String[] | 該屬性等價(jià)于 urlPatterns 屬性。但是兩者不應(yīng)該同時(shí)使用。 |
| urlPatterns | String[] | 指定一組過濾器的 URL 匹配模式。等價(jià)于 <url-pattern> 標(biāo)簽。 |
| servletNames | String[] | 指定過濾器將應(yīng)用于哪些 Servlet。取值是 @WebServlet 中的 name 屬性的取值,或者是 web.xml 中 <servlet-name> 的取值。 |
| dispatcherTypes | DispatcherType | 指定過濾器的轉(zhuǎn)發(fā)模式。具體取值包括: ASYNC、ERROR、FORWARD、INCLUDE、REQUEST。 |
| initParams | WebInitParam[] | 指定一組過濾器初始化參數(shù),等價(jià)于 <init-param> 標(biāo)簽。 |
| asyncSupported | boolean | 聲明過濾器是否支持異步操作模式,等價(jià)于 <async-supported> 標(biāo)簽。 |
| description | String | 該過濾器的描述信息,等價(jià)于 <description> 標(biāo)簽。 |
| displayName | String | 該過濾器的顯示名,通常配合工具使用,等價(jià)于 <display-name> 標(biāo)簽。 |
通過實(shí)踐發(fā)現(xiàn)如果想要控制filer的執(zhí)行順序可以通過控制filter的文件名來控制
比如:
UserLoginFilter.java 和 ApiLog.java 這兩個(gè)文件里面分別是“用戶登錄檢查過濾器”和“接口日志過濾器”,因?yàn)檫@兩個(gè)文件的首字母A排U之前,導(dǎo)致每次執(zhí)行的時(shí)候都是先執(zhí)行“接口日志過濾器”再執(zhí)行“用戶登錄檢查過濾器”,所以我們現(xiàn)在修改兩個(gè)文件的名稱分別為
Filter0_UserLogin.java
Filter1_ApiLog.java
這樣就能先執(zhí)行“用戶登錄檢查過濾器”再執(zhí)行“接口日志過濾器”
本文出自 “騰飛工作室” 博客,請務(wù)必保留此出處 http://m.survivalescaperooms.com/tfgzs/p/4571137.html
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注