拦截器在SpringBoot中使用,HandlerInterceptor,WebMvcConfigurer

拦截器在SpringBoot中使用,HandlerInterceptor,WebMvcConfigurer_第1张图片

拦截器在Controller之前执行。

用于权限校验,日志记录,性能监控

在SpringBoot中使用

  1. 创建拦截器类:首先,创建一个Java类来实现拦截器逻辑。拦截器类应该实现Spring提供的HandlerInterceptor接口。
  2. 实现拦截器方法:拦截器接口通常定义了三个方法:
  • preHandle 在方法调用之前执行逻辑,例如记录请求的开始时间
  • postHandle 在方法调用之后执行逻辑,但在视图渲染之前执行
  • afterCompletion 在整个请求处理完成后执行,用于资源清理等工作

你可以在这些方法中添加你需要的逻辑,比如在请求处理之前进行权限验证、在请求处理后记录日志等。

3.注册拦截器:将拦截器注册到Spring Boot应用程序中,使其生效。你可以通过配置类或者实现WebMvcConfigurer接口来完成拦截器的注册。

1.创建拦截器类实现HandlerInterceptor接口:

import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class LoggingInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 在方法调用之前执行逻辑,例如记录请求的开始时间
        System.out.println("Request received at: " + new Date());
        return true; // 放行请求
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        // 在方法调用之后执行逻辑,但在视图渲染之前执行
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        // 在整个请求处理完成后执行,用于资源清理等工作
    }
}

2.注册拦截器:在Spring Boot中,可以通过配置类来注册拦截器。

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 WebMvcConfig implements WebMvcConfigurer {

        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            // 注册拦截器,并指定拦截的URL路径
            registry.addInterceptor(new LoggingInterceptor()).addPathPatterns("/**");
        }
    }

在上述示例中,我们创建了一个LoggingInterceptor拦截器,并且使用addInterceptor方法将其添加到拦截器注册表中,然后通过addPathPatterns指定要拦截的URL路径为"/**",表示拦截所有请求。

这样,在每个请求被处理前,都会先执行LoggingInterceptor中的preHandle方法,实现记录请求开始时间的功能。

你可能感兴趣的:(spring,boot,后端,java)