• 技术文章 >Java >java教程

    通过java中SpringBoot实现过滤器、监听器、拦截器的方法介绍

    Y2JY2J2017-05-04 10:28:31原创1472
    本篇文章主要介绍了SpringBoot定义过滤器、监听器、拦截器的方法,具有一定的参考价值,有兴趣的可以了解一下。

    一、自定义过滤器

    创建一个过滤器,实现javax.servlet.Filter接口,并重写其中的init、doFilter、destory方法。

    package com.example.filter; 
    import java.io.IOException;  
    import javax.servlet.Filter; 
    import javax.servlet.FilterChain; 
    import javax.servlet.FilterConfig; 
    import javax.servlet.ServletException; 
    import javax.servlet.ServletRequest; 
    import javax.servlet.ServletResponse; 
    import javax.servlet.annotation.WebFilter; 
    /** 
     * 实现javax.servlet.Filter,覆盖其三个方法 
     * @author Administrator 
     * 
     */ 
    @WebFilter(filterName="customFilter",urlPatterns="/*") 
    public class CustomFilter implements Filter{ 
     
      @Override 
      public void destroy() { 
        System.out.println("CustomFilter过滤器销毁"); 
         
      } 
     
      @Override 
      public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
          throws IOException, ServletException { 
        System.out.println("CustomFilter指定过滤器操作......"); 
        //执行操作后必须doFilter 
        chain.doFilter(request, response); 
      } 
     
      @Override 
      public void init(FilterConfig arg0) throws ServletException { 
        System.out.println("CustomFilter初始化......"); 
      }     
    }

    二、自定义监听器

    创建一个过滤器,实现ServletContextListener接口

    package com.example.listener;  
    import javax.servlet.ServletContextEvent; 
    import javax.servlet.ServletContextListener; 
    import javax.servlet.annotation.WebListener; 
     
    /** 
     * 实现ServletContextListener,覆盖其两个方法 
     * @author Administrator 
     * 
     */ 
    @WebListener 
    public class CustomListener implements ServletContextListener{ 
     
      @Override 
      public void contextDestroyed(ServletContextEvent servletContext) { 
        System.out.println("servletContext销毁......"); 
         
      } 
     
      @Override 
      public void contextInitialized(ServletContextEvent servletContext) { 
        System.out.println("servletContext初始化......"); 
      } 
     
    }

    创建一个session监听器,监听session的创建和销毁

    package com.example.listener;  
    import javax.servlet.annotation.WebListener; 
    import javax.servlet.http.HttpSessionEvent; 
    import javax.servlet.http.HttpSessionListener; 
     
    /** 
     * 实现HttpSessionListener接口,监视session的动态 
     * @author Administrator 
     * 
     */ 
    @WebListener 
    public class SessionListener implements HttpSessionListener{ 
     
      @Override 
      public void sessionCreated(HttpSessionEvent session) { 
        System.out.println("session创建成功......"); 
         
      } 
     
      @Override 
      public void sessionDestroyed(HttpSessionEvent session) { 
        System.out.println("session销毁......"); 
         
      } 
     
    }

    三、自定义拦截器

    步骤:

    1、创建自己的拦截器实现HandlerInterceptor接口

    2、创建自己的拦截器链,继承WebMvcConfigurerAdapter类,重写addInterceptors方法。

    3、实例化自己的拦截器,并加入到拦截器链中。

    拦截器一:

    package com.example.Interceptor;  
    import javax.servlet.http.HttpServletRequest; 
    import javax.servlet.http.HttpServletResponse; 
    import org.springframework.web.servlet.HandlerInterceptor; 
    import org.springframework.web.servlet.ModelAndView; 
     
    public class CustomInterceptor implements HandlerInterceptor { 
     
      @Override 
      public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, 
          Exception exception) throws Exception { 
        //在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作) 
        System.out.println("3. 整个请求结束之后被调用......CustomInterceptor1......"); 
      } 
     
      @Override 
      public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView view) 
          throws Exception { 
        // 请求处理之后进行调用,但是在视图被渲染之前 
        System.out.println("2. 请求处理之后进行调用,但是在视图被渲染之前......CustomInterceptor1......"); 
      } 
     
      @Override 
      public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception { 
        // 在请求处理之前进行调用 
        System.out.println("1. 在请求处理之前进行调用......CustomInterceptor1......"); 
        // 只有返回true才会继续向下执行,返回false取消当前请求 
        return true; 
      } 
     
    }

    拦截器二:

    package com.example.Interceptor; 
    import javax.servlet.http.HttpServletRequest; 
    import javax.servlet.http.HttpServletResponse; 
    import org.springframework.web.servlet.HandlerInterceptor; 
    import org.springframework.web.servlet.ModelAndView; 
     
    public class CustomInterceptor2 implements HandlerInterceptor { 
     
      @Override 
      public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, 
          Exception exception) throws Exception { 
        //在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作) 
        System.out.println("3. 整个请求结束之后被调用......CustomInterceptor2......"); 
      } 
     
      @Override 
      public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView view) 
          throws Exception { 
        // 请求处理之后进行调用,但是在视图被渲染之前 
        System.out.println("2. 请求处理之后进行调用,但是在视图被渲染之前......CustomInterceptor2......"); 
      } 
     
      @Override 
      public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception { 
        // 在请求处理之前进行调用 
        System.out.println("1. 在请求处理之前进行调用......CustomInterceptor2......"); 
        // 只有返回true才会继续向下执行,返回false取消当前请求 
        return true; 
      } 
     
    }

    自定义拦截器链并加入自定义的拦截器

    package com.example.adapter; 
     
    import org.springframework.context.annotation.Configuration; 
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry; 
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 
     
    import com.example.Interceptor.CustomInterceptor; 
    import com.example.Interceptor.CustomInterceptor2; 
     
    /** 
     * 继承WebMvcConfigurerAdapter,复写addInterceptors方法 
     * @author Administrator 
     * 
     */ 
    @Configuration 
    public class WebAdapter extends WebMvcConfigurerAdapter{ 
     
      @Override 
      public void addInterceptors(InterceptorRegistry registry) { 
        //众多的拦截器组成了一个拦截器链 
        /** 
         * 主要方法说明: 
         * addPathPatterns 用于添加拦截规则 
         * excludePathPatterns 用户排除拦截 
         */ 
        registry.addInterceptor(new CustomInterceptor()).addPathPatterns("/*"); 
        registry.addInterceptor(new CustomInterceptor2()).addPathPatterns("/*"); 
        super.addInterceptors(registry); 
      } 
    }

    以上就是通过java中SpringBoot实现过滤器、监听器、拦截器的方法介绍的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    上一篇:教你eclipse下创建spring boot项目的java代码实例 下一篇:Java实现二分法查找的代码实例
    大前端线上培训班

    相关文章推荐

    • 理解java8中java.util.function.*pojo反射新方法(附代码)• 浅析安卓app和微信授权登录及分享完整对接(代码分享)• 教你一招搞定时序数据库在Spring Boot中的使用• 一招教你使用java快速创建Map(代码分享)• PlayFramework 完整实现一个APP(十一)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网