在SpringBoot中使用 攔截器
阿新 • • 發佈:2019-01-04
在 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;
}
實現自定義的攔截器需要實現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-----");
}
}
註冊攔截器
@Configuration
public class MyWebConfig extends WebMvcConfigurerAdapter{
/**
* 註冊 攔截器
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LogHandlerInterceptor());
}
}
測試:
UserController
@RestController
public class UserController {
@GetMapping("/user/home")
public String home(){
System.out.println("--- user home ---");
return "user home";
}
}