Untitled

过滤器(filter):

过滤器处于客户端与Web 资源(Servlet、JSP、HTML)之间,客户端与 Web 资源之间的请求和响应都要通过过滤器进行过滤。举例:在过滤器中定义了定制访问 192.10.10.1 这个地址,那么当客户端发出访问 192.10.10.1 的请求时,经过过滤器后,客户端得到的响应是出现该 IP 禁止访问的提示。

在 java web 中,你传入的 request,response 提前过滤掉一些信息,或者提前设置一些参数,然后再传入 servlet 或者 struts 的 action 进行业务逻辑,比如过滤掉非法 url(不是 login.do 的地址请求,如果用户没有登录都过滤掉),或者在传入 servlet 或者 struts 的 action 前统一设置字符集,或者去除掉一些非法字符。

拦截器(interceptor)

拦截器是一种面向方面/切面编程(AOP aspect-Oriented Programming)

面向切面就是将多个模块的通用服务进行分离,如权限管理、日志服务,他们在多个模块中都会用到,就可以将其各自封装为一个可重用模块,而这些通用服务的具体实现是通过拦截器来完成,比如用户客户端访问一些保密模块都应先通过权限审查的拦截器来进行权限审查,确定用户是否具有该项操作的权限后方能向下执行。

在面向切面编程的就是你的 service 或者一个方法前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其他业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。

两者的区别

拦截器是基于 Java 反射机制的,而过滤器是基于函数回调。