SpringBoot集成filter过滤器、interceptor拦截器【云图智联】

红牛战神
• 阅读 198

SpringBoot集成filter过滤器、interceptor拦截器【云图智联】
拦截器、过滤器

过滤器

`package com.example.demofilterinterceptorlistener.filter;
import javax.servlet.*;
import java.io.IOException;
/**
 * 自定义过滤器
 *
 * 记录请求执行时间
 */
public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("MyFilter.doFilter-pre");
        long start = System.currentTimeMillis();
        chain.doFilter(request, response);
        long end =System.currentTimeMillis();
        System.out.println("MyFilter.doFilter-after time: " + (end - start) + " ms");
    }
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("MyFilter.init");
    }
    @Override
    public void destroy() {
        System.out.println("MyFilter.destroy");
    }
}

拦截器

`package com.example.demofilterinterceptorlistener.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * 拦截器
 *
 * 统计请求处理时间
 */
public class MyInterceptor implements HandlerInterceptor {
    // 在 Controller 处理请求之前被调用
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("MyInterceptor.preHandle");
        request.setAttribute("startTime", System.currentTimeMillis());
        return true;
    }
    // 在 Controller 处理请求执行完成后、生成视图前执行
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("MyInterceptor.postHandle");
    }
    // 在 DispatcherServlet 完全处理请求后被调用
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        long startTime = (long)request.getAttribute("startTime");
        long endTime =  System.currentTimeMillis();
        long duration = endTime - startTime;
        System.out.println("MyInterceptor.afterCompletion: " + request.getRequestURL() +" duration: " + duration + "ms");
    }
}` 

注册生效

`package com.example.demofilterinterceptorlistener.config;
import com.example.demofilterinterceptorlistener.filter.MyFilter;
import com.example.demofilterinterceptorlistener.interceptor.MyInterceptor;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
    /**
     * 注册拦截器
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor())
                .addPathPatterns("/**");
    }
    /**
     * 注册过滤器
     * @return
     */
    @Bean
    public FilterRegistrationBean filterRegistrationBean() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new MyFilter());
        filterRegistrationBean.addUrlPatterns("/*");
        return filterRegistrationBean;
    }
}` 

执行结果

MyFilter.init
...
MyFilter.doFilter-pre
MyInterceptor.preHandle
MyInterceptor.postHandle
MyInterceptor.afterCompletion: http://localhost:8080/ duration: 26ms
MyFilter.doFilter-after time: 33 ms
...
MyFilter.destroy
点赞
收藏
评论区
推荐文章
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Easter79 Easter79
4年前
springboot使用Fiber纤程踩过的坑
@RequestAttribute为null在springboot中使用@FiberSpringBootApplication注解标注在SpringBootApplication上时,发现在拦截器(或过滤器)中调用request.setAttribute设置的值,在controller中使用@RequestAttribute获取却是null,而去
Easter79 Easter79
4年前
SpringMVC的拦截器(Interceptor)和过滤器(Filter)的区别与联系
一简介(1)过滤器:依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,比如:在过滤器中修改字符编码;在过滤器中修改HttpServletRequest的一些参数,包括:过滤低俗文字、危险字符等关于
Stella981 Stella981
4年前
SpringBoot 的过滤器 Filter 配置的三种方式
SpringBoot过滤器配置有三种方式1\.@ServletComponentScan@WebFilter,可配置过滤路径,但没有顺序(顺序是由过滤器命名决定)在启动类上使用 @ServletComponentScan,在过滤器类上使用 @WebFilter(urlPatterns{"/test/path"})
Stella981 Stella981
4年前
SpringBoot学习之路:09.Spring Boot中添加Filter应用
   上篇文章中说了SpringBoot中是如何使用servlet的,本文将讲解在SpringBoot中对过滤器Filter的实现一.编写MyFilter实现Filter接口packagecom.maxbill.core.webbox.filter;importorg.apache.log4j
Stella981 Stella981
4年前
Eclipse搭建springboot项目(八)拦截器、过滤器、监听器
知识点:1、SpringBoot2.x过滤器Filter和使用Servlet3.0配置自定义Filter(核心知识)  filter简单理解:人检票员(filter)景点  1)SpringBoot启动默认加载的Filter    characterEncodingFilter    
Easter79 Easter79
4年前
SpringBoot学习之路:09.Spring Boot中添加Filter应用
   上篇文章中说了SpringBoot中是如何使用servlet的,本文将讲解在SpringBoot中对过滤器Filter的实现一.编写MyFilter实现Filter接口packagecom.maxbill.core.webbox.filter;importorg.apache.log4j
Stella981 Stella981
4年前
Spring mvc之拦截器介绍
一、拦截器介绍 (1)拦截器概念介绍        拦截器(Interceptor)是Spring的核心功能之一,它可以在用户请求Action的之前或之后进行一些业务处理。        很多从ASP.NET转过来的开发人员把它叫做过滤器。(2)拦截器方法执行顺序
Stella981 Stella981
4年前
HBase
1过滤器HBase的基本API,包括增、删、改、查等。增、删都是相对简单的操作,与传统的RDBMS相比,这里的查询操作略显苍白,只能根据特性的行键进行查询(Get)或者根据行键的范围来查询(Scan)。HBase不仅提供了这些简单的查询,而且提供了更加高级的过滤器(Filter)来查询。1.1过滤器的两类参数过滤器可
Wesley13 Wesley13
4年前
Java过滤器与SpringMVC拦截器的差异学习笔记
学习摘录地址:http://blog.csdn.net/chenleixing/article/details/44573495今天学习和认识了一下,过滤器和SpringMVC的拦截器的区别,学到了不少的东西,以前一直以为拦截器就是过滤器实现的,现在想想还真是一种错误啊,而且看的比较粗浅,没有一个全局而又细致的认识,由于已至深夜,时间原因,我就把一些网友
Stella981 Stella981
4年前
Servlet 3.0 之@WebFilter怎么控制多个filter的执行顺序
 之前我们控制多个filter的执行顺序是通过web.xml中控制filter的位置来控制的,放在上面的会比放在下面的先执行,如下“用户登录检查过滤器”会比“接口日志过滤器”先执行!复制代码(https://oscimg.oschina.net/oscnet/b6cddad28c507c7e7de7eac1f9c0b27fbfe.gif)