过滤器和拦截器的区别

一、实现方式

1、Filter

实现javax.servlet.Filter接口,然后在web.xml中进行相关配置。

public interface Filter {
	//容器初始化时调用一次
    void init(FilterConfig var1) throws ServletException;
	
    void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3) throws IOException, ServletException;
	//容器销毁时调用一次
    void destroy();
}

2、Interceptor

实现org.springframework.web.servlet.HandlerInterceptor接口,然后在spring中进行相关配置。

public interface HandlerInterceptor {
	// 在业务处理器处理请求之前被调用
    boolean preHandle(HttpServletRequest var1, HttpServletResponse var2, Object var3) throws Exception;
	//在业务处理器处理请求之后被调用
    void postHandle(HttpServletRequest var1, HttpServletResponse var2, Object var3, ModelAndView var4) throws Exception;
	//在DispatcherServlet完全处理完请求后被调用 
    void afterCompletion(HttpServletRequest var1, HttpServletResponse var2, Object var3, Exception var4) throws Exception;
}

二、两者区别

1、范围不同

Filter位于 javax.servlet 包下,而拦截器(HandlerInterceptor)是 org.springframework.web.servle 包下的。所以Filter只能用于web程序中,而拦截器只要能适用spring就可以适用;

2、实现不同

Filter基于函数回调,filterChain.doFilter(request, response)继续调用。而拦截器返回Boolean,基于Java的反射机制,属于面向切面编程(AOP)的一种运用,就是在service或者一个方法前,调用一个方法,或者在方法后,调用一个方法,
比如动态代理就是拦截器的简单实现。

3、使用资源不同

拦截器是spring的一个组件,归spring管理,配置在spring文件里,因此能使用spring里的任何资源、对象,通过IOC注入到拦截器即可。而过滤器基于servlet容器,一般都在web.xml里配置;

4、使用深度不同

基于Filter接口,过滤器只在Servlet前后起作用。而拦截器可以深入到方法前后、异常抛出前后等,使用范围更广。所以在spring架构的项目中,优先使用拦截器。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值