过滤器与拦截器的区别

过滤器与拦截器的区别:

一、过滤器是Java EE体系中的,使用时需要在web.xml中配置节点;而拦截器是springMVC框架中的组件,使用时需要在spring的配置文件中进行配置(此处补充一点:字符编码过滤器不同于一般的过滤器,虽然使用时也是在web.xml中进行配置,但它是springmvc框架独有的组件,这点要注意!!!)。

二、过滤器是执行在所有的servlet之前,而拦截器是运行在DispatcherServlet之后,控制器之前的。

三、过滤器的过滤规则相对比较简单,只能通过节点配置它的适用范围;而拦截器的过滤规则相对比较灵活,既可以配置多项黑名单,还可以配置多项白名单。

1.过滤器的配置(此处已字符编码过滤器为例,其他过滤器配置方法类似):

<!-- 配置字符编码过滤器 -->
	<filter>
		<filter-name>CharacterEncodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>utf-8</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>CharacterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	
<!-- 过滤器 2-->
	<filter>
		<filter-name>...</filter-name>
		<filter-class>...</filter-class>
		<init-param>
			<param-name>...</param-name>
			<param-value>...</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>...</filter-name>
		<url-pattern>...</url-pattern>
	</filter-mapping>

2.拦截器配置:

	<mvc:interceptors>
		<!-- 配置第1个拦截器 -->
		<mvc:interceptor>
			<!-- 1. 拦截的路径,即黑名单-->
			<mvc:mapping path="/user/**" />
			<mvc:mapping path="/main/index.do" />
			<!-- 2. 例外的路径,不拦截的路径,即白名单-->
			<mvc:exclude-mapping path="/user/reg.do" />
			<mvc:exclude-mapping path="/user/handle_reg.do" />
			<mvc:exclude-mapping path="/user/login.do" />
			<mvc:exclude-mapping path="/user/handle_login.do" />
			<!-- 3. 指定拦截器类 -->
			<bean class="cn.demo.interceptor.LoginInterceptor" />
		</mvc:interceptor>
		
			<!-- 配置第2个拦截器 -->
		<mvc:interceptor>
			<!-- 1. 拦截的路径 ,即黑名单-->
			<mvc:mapping path=".." />
			<mvc:mapping path=".." />
			<!-- 2. 例外的路径,不拦截的路径,即白名单-->
			<mvc:exclude-mapping path=".." />
			<mvc:exclude-mapping path=".." />
			<mvc:exclude-mapping path=".." />
			<mvc:exclude-mapping path=".." />
			<!-- 3. 指定拦截器类 -->
			<bean class=".." />
		</mvc:interceptor>
	</mvc:interceptors>

四、两者都需要创建一个类。过滤器需要实现Filter接口,在实现类中重写doFilter()方法,实现过滤功能;而拦截器需要实现HandlerInterCeptor接口,在实现类中重写preHandle()方法,实现拦截功能。

五、一个项目中可以同时配置多个过滤器和拦截器。过滤器的执行顺序是按在web.xml文件中的位置自上而下执行;拦截器的执行顺序也是按照在spring配置文件中的顺序自上而下执行,同类型的黑名单和白名单必须配置在同一个拦截器里面,而且是先配置黑名单再配置白名单。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值