在 spring boot 配置Filter過(guò)濾器 中簡(jiǎn)單介紹了spring boot 中如何添加過(guò)濾器,有人問(wèn)到如果配置多個(gè)怎么控制,先經(jīng)過(guò)哪個(gè)過(guò)濾器,后經(jīng)過(guò)哪個(gè)過(guò)濾器。在web.xml中,我們知道,執(zhí)行順序是誰(shuí)在前邊執(zhí)行誰(shuí)。
在spring boot中的FilterRegistrationBean注冊(cè)過(guò)濾器的類(lèi)中有個(gè)order屬性,
private int order = Ordered.LOWEST_PRECEDENCE;
細(xì)看源碼可以知道,這個(gè)order的默認(rèn)值是Integer.MAX_VALUE 也就是int的最大值,
spring boot 會(huì)按照order值的大小,從小到大的順序來(lái)依次過(guò)濾。
spring boot 配置Filter過(guò)濾器 中可以這樣修改
/** * 配置過(guò)濾器 * @return */ @Bean public FilterRegistrationBean someFilterRegistration() { FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(sessionFilter()); registration.addUrlPatterns("/*"); registration.addInitParameter("paramName", "paramValue"); registration.setName("sessionFilter"); registration.setOrder(Integer.MAX_VALUE); return registration; }
再有一個(gè)過(guò)濾器的話,可以設(shè)置成 registration.setOrder(Integer.MAX_VALUE - 1)
spring boot也提供了注解的方式,例如
/** * 配置過(guò)濾器 * @return */ @Bean @Order(Integer.MAX_VALUE) public FilterRegistrationBean someFilterRegistration() { FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(sessionFilter()); registration.addUrlPatterns("/*"); registration.addInitParameter("paramName", "paramValue"); registration.setName("sessionFilter"); return registration; }
上面兩種方法都行,想用那種看你喜歡。。。。
聯(lián)系客服