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("")这是放行那些路径,可以加多个这方法,接着点就行
}
}