一、Spring MVC拦截器的使用
一、什么是拦截器
Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等。在SpringMVC中通过实现HandlerInterceptor接口实现自定义拦截器类。
二、拦截器的执行流程图
2、执行具体流程:
(1)当客户端方法请求过来后,先调度Filter过滤器;
(2)过滤器之后执行中央调度器;
(3)中央调度器调度HandlerMapping;
(4)HandlerMapping返回处理器执行链交给处理器适配器;
(5)中央调度器将处理器执行链交给处理器适配器;
(6)中央调度器将先执行拦截器中的preHandle方法,进行请求拦截,如果返回true则继续执行,返回false则请求结束;
(7)当拦截器返回true时,处理器适配器调度Handler执行;
(8)Handler将执行后的ModelAndView交给中央调度器;
(9)中央调度器执行拦截其中的postHandler方法;
(10)拦截器postHandle方法执行完毕后,由中央调度器将ModelAndView交给视图解析器ViewResolver;
(11)视图解析器返还视图View给中央调度器;
(12)中央调度器调度试图渲染;
(13)视图渲染完毕之后执行拦截器中的after方法;
(14)拦截器到此全部完毕,由中央调度器响应视图给客户端。
三、示例
1.定义jsp
<html> <body> <h2>Hello World!</h2> </body> </html>
2.定义interceptor类
继承HandlerInterceptor
public class Myinterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("/****************拦截器当中preHandle的执行方法****************/"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("在HandlerAdapter之后执行,在DispatcherServlet解析视图之前执行"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("===========呈现之后调用==========="); } }
详情如上重写方法实现拦截
3.在Spring-MVC中配置拦截器
<!--配置拦截器--> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/my/**"/> <bean class="com.SpringMVC.interceptor.Myinterceptor"/> </mvc:interceptor> </mvc:interceptors>
4.配置控制器
@Controller @RequestMapping("/my") public class MyController { @RequestMapping("/first") public String fileer(){ System.out.println("/***********控制器的方法***********/"); return "index"; } }
效果如下所示:
跳转到首页
如将preHandle return 改为false则是拦截,否则放行