SpringMVC拦截器的使用
定义拦截器,实现HandlerInterceptor接口。接口中提供三个方法。
1 package cn.itcast.ssm.interceptor; 2 3 import javax.servlet.http.HttpServletRequest; 4 import javax.servlet.http.HttpServletResponse; 5 6 import org.springframework.web.servlet.HandlerInterceptor; 7 import org.springframework.web.servlet.ModelAndView; 8 9 public class HandlerInterceptor1 implements HandlerInterceptor { 10 11 12 //进入 Handler方法之前执行 13 //用于身份认证、身份授权 14 //比如身份认证,如果认证通过表示当前用户没有登陆,需要此方法拦截不再向下执行 15 @Override 16 public boolean preHandle(HttpServletRequest request, 17 HttpServletResponse response, Object handler) throws Exception { 18 19 System.out.println("HandlerInterceptor1...preHandle"); 20 21 //return false表示拦截,不向下执行 22 //return true表示放行 23 return true; 24 } 25 26 //进入Handler方法之后,返回modelAndView之前执行 27 //应用场景从modelAndView出发:将公用的模型数据(比如菜单导航)在这里传到视图,也可以在这里统一指定视图 28 @Override 29 public void postHandle(HttpServletRequest request, 30 HttpServletResponse response, Object handler, 31 ModelAndView modelAndView) throws Exception { 32 33 System.out.println("HandlerInterceptor1...postHandle"); 34 35 } 36 37 //执行Handler完成执行此方法 38 //应用场景:统一异常处理,统一日志处理 39 @Override 40 public void afterCompletion(HttpServletRequest request, 41 HttpServletResponse response, Object handler, Exception ex) 42 throws Exception { 43 44 System.out.println("HandlerInterceptor1...afterCompletion"); 45 } 46 47 }
配置拦截器 :springmvc配置类似全局的拦截器,springmvc框架将配置的类似全局的拦截器注入到每个HandlerMapping中。
1 <!--拦截器 --> 2 <mvc:interceptors> 3 <!--多个拦截器,顺序执行 --> 4 <!-- 登陆认证拦截器 --> 5 <mvc:interceptor> 6 <mvc:mapping path="/**"/> 7 <bean class="cn.itcast.ssm.interceptor.LoginInterceptor"></bean> 8 </mvc:interceptor> 9 <mvc:interceptor> 10 <!-- /**表示所有url包括子url路径 --> 11 <mvc:mapping path="/**"/> 12 <bean class="cn.itcast.ssm.interceptor.HandlerInterceptor1"></bean> 13 </mvc:interceptor> 14 <mvc:interceptor> 15 <mvc:mapping path="/**"/> 16 <bean class="cn.itcast.ssm.interceptor.HandlerInterceptor2"></bean> 17 </mvc:interceptor> 18 </mvc:interceptors>