示例

(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)测试结果