在Java中,攔截器(Interceptor)通常用于在請求處理之前和之后執行一些操作。攔截器可以用于實現諸如身份驗證、授權、日志記錄等功能。要實現一個攔截器,你需要遵循以下步驟:
public interface HandlerInterceptor {
boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler);
void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView);
void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex);
}
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
// 在請求處理之前執行的操作
System.out.println("preHandle: 請求處理之前");
return true; // 返回true表示繼續處理請求,返回false表示中斷請求處理
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
// 在請求處理之后,但在視圖渲染之前執行的操作
System.out.println("postHandle: 請求處理之后,但在視圖渲染之前");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
// 在請求處理完成后執行的操作
System.out.println("afterCompletion: 請求處理完成");
}
}
WebMvcConfigurer
接口并重寫addInterceptors
方法來注冊攔截器。例如:@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptor()) // 注冊攔截器
.addPathPatterns("/**") // 指定攔截器應用于哪些請求
.excludePathPatterns("/login", "/register"); // 指定攔截器不應用于哪些請求
}
}
現在,當有請求到達時,MyInterceptor
中的方法將按照順序執行。你可以根據需要在這些方法中添加自己的邏輯。