在SpringBoot中使用 拦截器
在 SpringBoot中使用拦截器
拦截器接口 HandlerInterceptor
public interface HandlerInterceptor { boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception; void postHandle( HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception; void afterCompletion( HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception;}1234567891011121314151617
实现自定义的拦截器需要实现HandlerInterceptor接口
例如:LogHandlerInteceptor
public class LogHandlerInterceptor implements HandlerInterceptor { /** * controller 执行之前调用 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("------preHandle-----"); return true; } /** * controller 执行之后,且页面渲染之前调用 */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("------postHandle-----"); } /** * 页面渲染之后调用,一般用于资源清理操作 */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("------afterCompletion-----"); }}1234567891011121314151617181920212223242526272829303132
注册拦截器
@Configurationpublic class MyWebConfig extends WebMvcConfigurerAdapter{ /** * 注册 拦截器 */ @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LogHandlerInterceptor()); }}123456789101112
测试:
UserController
@RestControllerpublic class UserController { @GetMapping("/user/home") public String home(){ System.out.println("--- user home ---"); return "user home"; }}12345678910