转载

Spring Boot 的简单教程(八)拦截器,过滤器,监听器

很多时候我们都想要做一些与业务逻辑无关的事情,比如统计在线人数,筛选登陆账号,统计页面浏览量等等。。。这时候我们就需要用到今天讲到的这些工具了。

  1. 首先我们先看一下拦截器

    我们需要先自定义一个拦截器,写上我们自己对逻辑的处理。

    @Slf4j
    public class MyInterceptor implements HandlerInterceptor {
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
                throws Exception {
            log.info("preHandle:请求前调用");
            //返回 false 则请求中断
            return true;
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                               ModelAndView modelAndView) throws Exception {
            log.info("postHandle:请求后调用");
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
                throws Exception {
            log.info("afterCompletion:请求调用完成后回调方法,即在视图渲染完成后回调");
        }
    }

    然后我们需要注册这个拦截器

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

    当然了需要在启动类上添加注解@ServletComponentScan才能生效。这就是一个简单的没什么逻辑的拦截器了,如果需要什么特别的操作的话就直接在我们自定义的拦截器方法里面写就好了。

  2. 接下来我民额看一下过滤器,和上面的拦截器一样,我们需要先自定义一个过滤器,实现我们自己想实现的方法。

    @Slf4j
    public class MyFilter implements Filter {
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            log.info("filter 初始化");
        }
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            // TODO Auto-generated method stub
            log.info("doFilter 请求处理");
            //对request、response进行一些预处理
            // 比如设置请求编码
            // request.setCharacterEncoding("UTF-8");
            // response.setCharacterEncoding("UTF-8");
            //TODO 进行业务逻辑
    
            //链路 直接传给下一个过滤器
            chain.doFilter(request, response);
        }
    
        @Override
        public void destroy() {
            log.info("filter 销毁");
        }
    }

    然后我们调用我们写的这个过滤器。

    @Configuration
    public class FilterConfig {
        @Bean
        public FilterRegistrationBean ResistFilter() {
            FilterRegistrationBean registration = new FilterRegistrationBean();
            //当过滤器有注入其他bean类时,可直接通过@bean的方式进行实体类过滤器,这样不可自动注入过滤器使用的其他bean类。
            //当然,若无其他bean需要获取时,可直接new MyFilter(),也可使用getBean的方式。
            registration.setFilter(new MyFilter());
            //过滤器名称
            registration.setName("customFilter");
            //拦截路径
            registration.addUrlPatterns("/hello");
            //设置顺序
            registration.setOrder(10);
            return registration;
        }
    }

    在拦截器哪里我们已经在启动类上添加了注解,所以这里就不用重复添加了。

  3. 我们最后来看一下监听器,这里的监听器不需要调用等操作,只需要写好,添加注解就可以了。

    /**
     * 监听器
     * servletRequestListener一般来实现web浏览量
*/
@WebListener
@Slf4j
public class ServletLister implements ServletRequestListener {

    @Override
    public void requestDestroyed(ServletRequestEvent sre) {
        log.info("监听器:销毁");
    }

    @Override
    public void requestInitialized(ServletRequestEvent sre) {
        log.info("监听器:初始化");
    }
}
```
```
/**
 * 监听器
 * httpSessionListener来实如今线人数的统计
 * @author zhouzhaodong
 */
@WebListener
@Slf4j
public class HttpLister implements HttpSessionListener {

    @Override
    public void sessionCreated(HttpSessionEvent se) {
        log.info("又有人上线了,统计一下在线人数吧!");
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        log.info("又有人下线了,统计一下在线人数吧!");
    }
}
```
监听器主要是用来统计数量的。
就是先简单的记录一下拦截器,过滤器和监听器的简单使用方法,后期如果有详细的使用方法,再来更新本文。
代码下载地址:https://github.com/zhouzhaodong/Study
原文  https://segmentfault.com/a/1190000019916005
正文到此结束
Loading...