示例
(1)编写拦截器
package learnspring.learnspring.interceptor;
import org.springframework.stereotype.Component;
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-09-24 15:13
* 说明:拦截器
* 一个简单的拦截器,计算每一次请求的处理时间
*/
@Component
public class DemoInterceptor extends HandlerInterceptorAdapter {
/**
* 在请求发生前执行
*/
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object object) throws Exception {
long startTime = System.currentTimeMillis();
System.out.println("拦截器接收到请求的时间:" + new Long(startTime));
request.setAttribute("startTime", startTime);
return true;
}
/**
* 在请求发生之后执行
*/
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response,
Object object,
ModelAndView modelAndView) throws Exception {
long startTime = (Long) request.getAttribute("startTime");
request.removeAttribute("startTime");
long endTime = System.currentTimeMillis();
System.out.println("本此请求的处理时间为:" + endTime + " - " + startTime + " = " +
new Long(endTime - startTime) + "ms");
request.setAttribute("handlingTime", endTime - startTime);
}
}
(2)在配置类中注册拦截器
package learnspring.learnspring.interceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;
/**
* @author 肖政宇
* @date 2019-09-24 15:27
* 说明:配置
*/
@Configuration
@EnableWebMvc
public class MyMvcConfig implements WebMvcConfigurer {
DemoInterceptor demoInterceptor;
@Autowired
public void setDemoInterceptor(DemoInterceptor demoInterceptor) {
this.demoInterceptor = demoInterceptor;
}
/**
* 注册拦截器
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(demoInterceptor);
}
}
(3)简单的控制器
package learnspring.learnspring.interceptor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author 肖政宇
* @date 2019-09-24 15:38
* 说明:
*/
@RestController
@RequestMapping("/test")
public class TestController {
@GetMapping("hello")
public String sayHello() {
return "Hello";
}
}
(4)测试结果