在Spring Boot中,你可以通过自定义拦截器(HandlerInterceptor
)来拦截Controller方法的调用和响应。拦截器允许你在Controller方法执行前、执行后,以及视图渲染前进行一些操作,比如记录日志、权限验证、添加响应头等。
以下是一个简单示例,展示如何创建一个拦截器来拦截Controller的调用和响应:
- 创建一个实现
HandlerInterceptor
接口的拦截器类:
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 在Controller方法调用前执行
return true; // 返回 true 表示继续执行Controller方法,返回 false 表示中断
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// 在Controller方法调用后、视图渲染前执行
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// 在视图渲染完成后执行,通常用于资源清理等操作
}
}
- 注册拦截器:
在 Spring Boot 中,你需要创建一个 WebMvcConfigurer
配置类,然后在其中注册你的拦截器。
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 注册自定义拦截器,并指定拦截的路径
registry.addInterceptor(new MyInterceptor()).addPathPatterns("/api/**");
}
}
在上述示例中,addInterceptors
方法用于注册自定义的拦截器,并通过 addPathPatterns
指定了拦截的路径模式,例如 /api/**
。
现在,当你的Controller方法被调用时,拦截器的 preHandle
方法将在方法执行前被调用,postHandle
方法将在方法执行后、视图渲染前被调用,afterCompletion
方法将在视图渲染完成后被调用。
拦截器的使用可以帮助你在Controller层面对请求进行处理和响应的拦截操作,从而实现例如日志记录、权限验证、响应头设置等功能。