Spring Boot 添加拦截器 Interceptor

 

一、Spring Boot 添加拦截器步骤

1、创建一个类 LogInterceptor 实现 HandlerInterceptor 接口 ,重新拦截器中3个方法,这里和SpringMVC中没有区别,拦截器各个方法作用这里


import java.lang.reflect.Method;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import lombok.extern.slf4j.Slf4j;
import xyz.annotation.LogRecord;
import xyz.utils.LogUtils;

/**
 * description: 日志拦截器
 * @version v1.0
 * @author w
 * @date 2021年2月27日下午7:37:28
 **/
@Slf4j
@Component
public class LogInterceptor implements HandlerInterceptor {

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, 
			Object handler) throws Exception {
		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 {
		 if (handler instanceof HandlerMethod) {
	            HandlerMethod handlerMethod = (HandlerMethod) handler;
	            Method method = handlerMethod.getMethod();
	            LogRecord annotation = method.getAnnotation(LogRecord.class);
	            if(null != annotation) {
	            	String record = annotation.record();
	            	String num = annotation.num();
	            	// 进行日志记录
	            	LogUtils.saveLog(record, num);
	            }
		 }
		
	}
	
}

 

2、创建 InterceptorConfig 类 继承 WebMvcConfigurationSupport 类,注册已经配置的拦截器。

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

/**
 * description: 配置拦截器
 * @version v1.0
 * @author w
 * @date 2021年2月27日下午8:54:58
 **/
@Component
public class InterceptorConfig extends WebMvcConfigurationSupport {
	
	@Resource
	private LogInterceptor logInterceptor;
	
	@Override
	protected void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(logInterceptor)
				.addPathPatterns("/**") // 拦截所有请求
				.excludePathPatterns("/static/**");  // 静态资源过滤
		super.addInterceptors(registry);
	}
}

 

二、总结一下

1、实现 HandlerInterceptor 接口,按照需求重写拦截方法

2、继承 WebMvcConfigurationSupport 类, 注册拦截器。

3、注册拦截器步骤,等价于 springmvc.xml 中 <mvc:interceptors> 标签,如:

<mvc:interceptors>
    <!-- LogInterceptor  -->
    <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <bean id="logInterceptor" class="com.runcode.interceptor.LogInterceptor" />
    </mvc:interceptor>
  </mvc:interceptors>

 

参考资料: SpringMVC 拦截器使用方法

 

 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐