SpringBoot中Filter和Interceptor如何使用,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
成都創新互聯公司于2013年創立,先為南譙等服務建站,南譙等地企業,進行企業商務咨詢服務。為南譙企業網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。一、Filter(過濾器)
Filter接口定義在javax.servlet包中,是Servlet規范定義的,作用于Request/Response前后,被Servlet容器調用,當Filter被Sring管理后可以使用Spring容器資源。
實現一個Filter
自定義的過濾器需要實現javax.servlet.Filter,Filter接口中有三個方法:
init(FilterConfig filterConfig):過濾器初始化的被調用。 doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain):在doFilter()方法中,chain.doFilter()前的一般是對request執行的過濾操作,chain.doFilter后面的代碼一般是對response執行的操作,chain.doFiter()執行下一個過濾器或者業務處理器。 destory():過濾器銷毀的時候被調用。
在Spring容器中使用過濾器
通過FilterRegistrationBean
@Configuration public class WebConfig{ @Bean public FilterRegistrationBean xxxFilter() { FilterRegistrationBean registrationBean = new FilterRegistrationBean(); registrationBean.setFilter(new xxxFilter()); registrationBean.setUrlPatterns(Arrays.asList("/*")); registrationBean.setOrder(1); // 過濾器的優先級 return registrationBean; }}
通過@WebFilter和@ServletComponentScan
通過@WebFilter的方式定義Filter,默認使用Filter的類名設置優先級。使用FilterRegistrationBean可以指定優先級。Filter使用白名單過濾Url的方式,配置需要攔截的Url,如果想設置不過濾某些Url需要在doFilter方法中指定。
二、Interceptor(攔截器)
定義一個Interceptor需要實現org.springframework.web.servlet.HandlerInterceptor接口,Interceptor是Spring容器定義的,它可以使用Spring容器的任何資源,只要通過IoC注入到Interceptor即可,Interceptor可以深入到業務處理方法的執行前后和拋出異常的時候,而Filerter無法做到這一點,所以Interceptor相比Filter具有更大的彈性。
實現一個Interceptor
實現HandlerInterceptor或者繼承HandlerInterceptorAdapter
public interface HandlerInterceptor { default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return true; } default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception { } default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception { }}
preHandle:在業務處理器處理請求之前被調用。 postHandle:在業務處理器處理請求后并生成視圖前被調用,此時有機會修改ModelAndView。 afterCompletion:業務處理處理器處理完請求后(已經渲染視圖)被執行,并可以處理業務方法發生異常的場景。
在Spring容器中使用攔截器
@Configurationpublic class WebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { InterceptorRegistration registration = registry.addInterceptor(new TimeInterceptor()); registration.excludePathPatterns("/user"); registration.excludePathPatterns("/*"); }}
Interceptor既可以指定要過濾的Url也可以指定不攔截的Url,缺省情況攔截所有Url。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注創新互聯行業資訊頻道,感謝您對創新互聯網站建設公司,的支持。
網站標題:SpringBoot中Filter和Interceptor如何使用-創新互聯
瀏覽路徑:http://vcdvsql.cn/article46/cdgehg.html
成都網站建設公司_創新互聯,為您提供品牌網站設計、軟件開發、網站設計、ChatGPT、動態網站、網站策劃
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯