Home >Java >javaTutorial >Comparative analysis of time-consuming examples of SpringBoot implementation of filter interceptors

Comparative analysis of time-consuming examples of SpringBoot implementation of filter interceptors

WBOY
WBOYforward
2023-05-12 09:43:131690browse

Filter method

This method is simpler but not very configurable

Note: must be scanned into the spring container

Create a class to implement the filter interface

  • init: This method is a method to initialize the filter object. It is only called once after the container initializes the filter object. The parameter FilterConfig can obtain the filter's Initialization parameters;

  • doFilter: can perform <u>preprocessing</u> on request and response. FilterChain can pass the processed request and response objects to the next resource on the filtering chain.

  • destroy(): This method is called before the container destroys the object.

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

@Component
public class LogFilter implements Filter {

    private static final Logger LOG = LoggerFactory.getLogger(LogFilter.class);

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        // 打印请求信息
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        LOG.info("------------- LogFilter 开始 -------------");
        LOG.info("请求地址: {} {}", request.getRequestURL().toString(), request.getMethod());
        LOG.info("远程地址: {}", request.getRemoteAddr());

        long startTime = System.currentTimeMillis();
        filterChain.doFilter(servletRequest, servletResponse);
        LOG.info("------------- LogFilter 结束 耗时:{} ms -------------", System.currentTimeMillis() - startTime);
    }
}

Result

Comparative analysis of time-consuming examples of SpringBoot implementation of filter interceptors

Summary

1. Filters are used to implement common functions and reduce code redundancy , improve maintainability;

2. One filter can be configured for multiple resources (coding filter);

3. One resource can also be configured with multiple filters, according to the configuration Called sequentially.

Interceptor method

If you don’t understand, please read the introduction first and then come again

Interceptor introduction

No more words, just go to the code

Create interceptor

/**
 * 拦截器:Spring框架特有的,常用于登录校验,权限校验,请求日志打印 /login
 * @author : look-word
 * 2022-06-26 13:55
 **/
@Component
public class LogInterceptor implements HandlerInterceptor {
    private static final Logger LOG = LoggerFactory.getLogger(LogInterceptor.class);

        
    @Override
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
         // 打印请求信息
         LOG.info("------------- LogInterceptor 开始 -------------");
         LOG.info("请求地址: {} {}", request.getRequestURL().toString(), request.getMethod());
         LOG.info("远程地址: {}", request.getRemoteAddr());

         long startTime = System.currentTimeMillis();
         request.setAttribute("requestStartTime", startTime);
         return true;
     }

     @Override
     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
         long startTime = (Long) request.getAttribute("requestStartTime");
         LOG.info("------------- LogInterceptor 结束 耗时:{} ms -------------", System.currentTimeMillis() - startTime);
     }
}

Register interceptor

Register our interceptor to the interceptor chain

/**
 * @author : look-word
 * 2022-06-26 14:03
 **/
@Configuration
public class SpringMvcConfig implements WebMvcConfigurer {

    @Resource
    private LogInterceptor logInterceptor;
    /**
     * 注册拦截器
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry
                .addInterceptor(logInterceptor)
                .addPathPatterns("/**")// 对那些接口拦截
                .excludePathPatterns("/login");// 对哪些接机口放行
        WebMvcConfigurer.super.addInterceptors(registry);
    }
}

Test Results

Comparative analysis of time-consuming examples of SpringBoot implementation of filter interceptors

The above is the detailed content of Comparative analysis of time-consuming examples of SpringBoot implementation of filter interceptors. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:yisu.com. If there is any infringement, please contact admin@php.cn delete