1. 程式人生 > >filter和iterceptor的區別

filter和iterceptor的區別

Filter主要是用來過濾一些編碼之類的東西的

springmvc的攔截器主要作用也是在服務端真正處理請求前後進行一些相關的操作。 例如初始化資源,許可權監控,會話設定,選單獲取,資源清理等。

攔截器和filter(過濾器)的區別

a.實現的介面不一樣 HandlerInterceptor   Filter

b.Filter必須依賴於web容器,但是攔截器不一定依賴web容器

c.Filter是基於回撥函式的,攔截器是基於AOP思想的一個實現

d.Filter設計的目的是對請求和響應進行過濾,攔截器的目的是攔截

e.interceptor是用來攔截controller方法的,它是攔截不住servlet的,它是使用aop技術實現的

f.filter是用來過濾servlet請求的,基於servlet的,它是基於web

如下這個圖,這就是它們幾個之間的關係

當瀏覽器傳送請求的時候,先走的是filter,才走的interceptor

Filter它會過濾servlet,jsp,和靜態資源,過濾jsp的原因是jsp其實也是一個servlet的,而靜態資源的話,其實靜態資源載入的時候也是傳送的請求訪問的後臺的方法所以也會過濾的.

使用Filter的時候如何放行靜態資源呢

在springmvc配置檔案加這段

<!-- 放行靜態資源 -->
<mvc:default-servlet-handler/>    //如果加了這一句的話下面就不用加了,如果加這句不好使再加下面的這些

<!-- <mvc:resources mapping="/easyUI/**" location="/easyUI/" />
<mvc:resources mapping="/imags/**" location="/imags/"/>
<mvc:resources mapping="/js/**" location="/js/"/>
<mvc:resources mapping="/zTree_v3/**" location="/zTree_v3/"/>
<mvc:resources mapping="/images/**" location="/images/"/>
-->

interceptor也會攔截靜態資源,放行方式

使用ssm的方式

<mvc:interceptors>
   <!-- 許可權攔截器-->
    <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <!--放行靜態資源-->
        <mvc:exclude-mapping path="/css/**"/>
        <mvc:exclude-mapping path="/demo/**"/>
        <mvc:exclude-mapping path="/easyUI/**"/>
        <mvc:exclude-mapping path="/images/**"/>
        <mvc:exclude-mapping path="/js/**"/>
        <ref bean="loginInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

使用springboot的方式 ,配置自定義過濾類

package com.buba.configuration;

        import org.springframework.beans.factory.annotation.Autowired;
        import org.springframework.boot.SpringBootConfiguration;
        import org.springframework.web.servlet.HandlerInterceptor;
        import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
        import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@SpringBootConfiguration
public class InterceptorConfiguration extends WebMvcConfigurerAdapter {
    @Autowired
    private HandlerInterceptor interceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(interceptor).addPathPatterns("/**").excludePathPatterns("");
        //addPathPatterns("/**")  這是攔截那些路徑
        //excludePathPatterns("")這是放行那些路徑,可以加多個這方法,接著點就行
    }
}

springboot如何使用攔截器 https://blog.csdn.net/kxj19980524/article/details/85318273

springboot如何使用過濾器 https://blog.csdn.net/kxj19980524/article/details/85282414