SpringMVC拦截器
Spring MVC 的拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理。
将拦截器按一定的顺序联结成一条链,这条链称为拦截器链(InterceptorChain)。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。拦截器也是AOP思想的具体实现。
自定义拦截器很简单,只有如下三步:
①创建拦截器类实现HandlerInterceptor接口
②目标方法
③配置拦截器
测试的url
http://localhost:8080/eighteen?param=yes
拦截器类
package com.interceptor;
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 {
System.out.println("preHandle");
// 从url中获得参数
String getParam = request.getParameter("param");
if(getParam.equals("yes")){
return true;
}else{
return false;
}
}
// 目标方法执行之后,视图对象返回之前,执行
@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");
}
}
配置拦截器
<!-- 配置拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<!-- 对哪些资源进行拦截-->
<mvc:mapping path="/**"/>
<bean id="MyInterceptor" class="com.interceptor.MyInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
目标方法
@RequestMapping("eighteen")
public ModelAndView test18(){
System.out.println("目标方法执行");
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("name","123");
modelAndView.setViewName("success");
return modelAndView;
}