springboot使用过滤器,拦截器,监听器

    xiaoxiao2023-10-01  169

    一、过滤器的使用

    1.写一个类继承Filter

    @WebFilter(filterName="myFilter",urlPatterns={"/*"}) public class AMyFilter2 implements Filter{ @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("==========初始化过滤器A"); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("=======进入过滤器2a"); filterChain.doFilter(servletRequest, servletResponse); //放行过滤器 } @Override public void destroy() { } }

    注意:拦截器执行的顺序与  filterName="myFilter" 的值有关,按字母排序

    也可以通过@Order指定执行顺序,值越小,越先执行

    2.启动类加上注解

    @ServletComponentScan

     二、监听器的使用

    1.写一个类继承ServletRequestListener

    @WebListener public class myListen1 implements ServletRequestListener { @Override public void requestDestroyed(ServletRequestEvent servletRequestEvent) { System.out.println("监听器1销毁"); } @Override public void requestInitialized(ServletRequestEvent servletRequestEvent) { System.out.println("监听器1初始化"); } }

    2.启动类加上注解

    @ServletComponentScan

    三、拦截器的使用

    1.写一个类继承HandlerInterceptor

    @Component public class MyInterceptor implements HandlerInterceptor{ @Override public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception { System.out.println("======请求前拦截器"); return true; } @Override public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { System.out.println("======请求后调用拦截器"); } @Override public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception { System.out.println("=======拦截器,请求调用完成后回调方法,即在视图渲染完成后回调"); } }

    2.写一个配置类注入拦截器

    @Configuration public class WebMvcConfigurer extends WebMvcConfigurerAdapter{ @Autowired MyInterceptor myInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { //注册拦截器 拦截规则 //多个拦截器时 以此添加 执行顺序按添加顺序 registry.addInterceptor(getHandlerInterceptor()); } @Bean public static HandlerInterceptor getHandlerInterceptor() { return new MyInterceptor(); } }

    观察过滤器,监听器,拦截器的请求顺序

    =======监听器1初始化 2019-05-25 11:42:11.586 INFO 7536 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring FrameworkServlet 'dispatcherServlet' 2019-05-25 11:42:11.586 INFO 7536 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization started 2019-05-25 11:42:11.612 INFO 7536 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed in 26 ms =======进入过滤器2a =======进入过滤器 =======进入过滤器2 ======请求前拦截器 测试 ======请求后调用拦截器 =======拦截器,请求调用完成后回调方法,即在视图渲染完成后回调 =======监听器1销毁

    四、总结

    过滤器:用于属性甄别,对象收集(不可改变过滤对象的属性和行为)

    监听器:用于对象监听,行为记录(不可改变监听对象的属性和行为)

    拦截器:用于对象拦截,行为干预(可以改变拦截对象的属性和行为)

     

    最新回复(0)