拦截器和过滤器的区别
https://www.cnblogs.com/panxuejun/p/7715917.html
1、过滤器和拦截器的区别
1、拦截器不依赖与servlet容器,过滤器依赖与servlet容器。也就是说Filter 在服务启动的时候就初始化好了。
2、拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。
3、拦截器是spring容器的,是spring支持的.没有初始化等方法生命周期和filter 不一样。
4、filter和拦截器都可以拦截asp页面、图片、视频。
2、拦截器的的请求流程
从这个图上可以看到filter的触发时机和拦截器的触发的时机不同
2.1 preHandle 如果返回false 那么请求就不会到后台的java服务了
@MyAnotation @RequestMapping("/hello1") @ResponseBody public String hello1(){ String name = myService.sayHello("tomcat"); System.out.println(name); return name; } public class SourceAccessInterceptor implements HandlerInterceptor { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("进入拦截器了"); // 反射获取方法上的LoginRequred注解 HandlerMethod handlerMethod = (HandlerMethod)handler; MyAnotation myAnotation = handlerMethod.getMethod().getAnnotation(MyAnotation.class); if(myAnotation == null){ return true; } // 有LoginRequired注解说明需要登录,提示用户登录 response.setContentType("application/json; charset=utf-8"); response.getWriter().print("你访问的资源需要登录"); return false; } public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }
3、多个filter的请求的流程