Spring MVC拦截器配置

(1)自定义拦截器

package learnspringboot.xiao.other;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

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

/**
* @author 肖政宇
* @date 2019-10-10 11:01
* 说明:拦截器实例
* 拦截器能够在处理每一个请求的前后做一些事情。
* 可以让普通的Bean事项HandlerInterceptor接口或者继承HandlerInterceptorAdapter类来实现自定义的拦截器。
* 拦截器需要在配置类中注册。
*/
public class DemoInterceptor extends HandlerInterceptorAdapter {

/**
* 本拦截器实现的功能:计算每一次请求的处理时间
*/

/**
* 在控制器处理web请求前执行的工作
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//1、获取接收到请求时的系统时间,即开始处理请求的时间
long startTime = System.currentTimeMillis();
//2、将时间保存的request体中
request.setAttribute("startTime", startTime);
return super.preHandle(request, response, handler);
}

/**
* 在控制器处理web请求后执行的工作
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
//1、从request体中取出之前存进去的“处理本次请求的开始时间”
long startTime = (Long) request.getAttribute("startTime");
request.removeAttribute("startTime");
//2、获取当前系统时间,即处理完当前请求的时间
long endTime = System.currentTimeMillis();
//3、计算得出处理本次请求的总时间
long totalTime = endTime - startTime;

System.out.println("本次请求的处理时常:" + totalTime);
request.setAttribute("totalTime", totalTime);
super.postHandle(request, response, handler, modelAndView);
}
}

(2)注册拦截器

package learnspringboot.xiao.other;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
* @author 肖政宇
* @date 2019-10-10 11:06
* 说明:注册拦截器
*/
@Configuration
@EnableWebMvc
public class InterceptorConfig implements WebMvcConfigurer {

/**
* 显式声明Bean
*/
@Bean
public DemoInterceptor demoInterceptor() {
return new DemoInterceptor();
}

/**
* 注册拦截器
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(demoInterceptor());
}
}

(3)测试

图1 运行程序

图2 发送请求

图3 拦截器工作结果


02-13 20:24