在Spring框架中,我们可以使用拦截器(Interceptor)来实现自定义拦截器。拦截器允许我们在请求处理之前、之后或发生异常时执行特定的代码。
以下是一个简单的自定义拦截器的示例:
- 创建一个实现
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 CustomInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 在请求处理之前执行的代码
System.out.println("Before request handling");
return true; // 返回true表示继续处理请求,返回false表示中止请求处理
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// 在请求处理之后执行的代码
System.out.println("After request handling");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception) throws Exception {
// 在请求处理完成之后执行的代码,无论请求处理是否成功
System.out.println("After completion");
}
}
- 在Spring配置文件中注册拦截器:
<bean id="customInterceptor" class="com.example.CustomInterceptor" />
<interceptors>
<bean class="org.springframework.web.servlet.interceptor.HandlerInterceptorAdapter">
<property name="interceptors">
<list>
<ref bean="customInterceptor" />
</list>
</property>
</bean>
</interceptors>
在上面的配置中,我们首先创建了一个名为customInterceptor
的拦截器bean,然后在interceptors
标签中注册了这个拦截器。注意,这里使用了HandlerInterceptorAdapter
来作为拦截器的基类,这是因为HandlerInterceptorAdapter
实现了HandlerInterceptor
接口,并且提供了默认的实现。在实际开发中,我们通常会直接使用HandlerInterceptor
接口,而不是继承HandlerInterceptorAdapter
。
• Spring MVC也可以使用拦截器对请求进行拦截处理,用户 可以自定义拦截器来实现特定的功能,自定义的拦截器必 须实现HandlerInterceptor接口
– preHandle():这个方法在业务处理器处理请求之前被调用,在该 方法中对用户请求 request 进行处理。如果程序员决定该拦截器对 请求进行拦截处理后还要调用其他的拦截器,或者是业务处理器去 进行处理,则返回true;如果程序员决定不需要再调用其他的组件 去处理请求,则返回false。
– postHandle():这个方法在业务处理器处理完请求后,但 是DispatcherServlet 向客户端返回响应前被调用,在该方法中对 用户请求request进行处理。
– afterCompletion():这个方法在 DispatcherServlet 完全处理完请 求后被调用,可以在该方法中进行一些资源清理的操作。