唐僧喜欢小龙女

导航

拦截器和过滤器的区别

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的请求的流程

 

posted on 2022-02-14 16:59  与时具进&不忘初心  阅读(35)  评论(0编辑  收藏  举报