0%

SpringMVC3

springMVC拦截器

定义两个拦截器,实现HandlerInterceptor接口,并重写里面的三个方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package com.syl.test;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

/**
* @author Administrator
* @date 2019-10-01 20:54
*
*/
public class HandlerInterceptor1 implements HandlerInterceptor {


//进入Handler方法之前执行此方法
//常用登录身份认证,授权等
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {

return HandlerInterceptor.super.preHandle(request, response, handler);
}


//进入Handler方法之后,返回ModelAndView之前执行此方法
//应用场景从ModelAndView出发:将公用的模型数据(比如菜单导航)在这里传到视图,也可以在这里统指定视图
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {

HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}


//执行handler方法之后执行此方法
//进行统一的异常处理以及统一的日志处理
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {

HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}



}

在springmvc.xml文件中配置

1
2
3
4
5
6
7
8
9
10
11
12
<mvc:interceptors>
<!-- 多个拦截器按顺序执行 -->
<mvc:interceptor>
<!-- /**表示拦截所有的url以及子url -->
<mvc:mapping path="/**"/>
<bean class="com.syl.test.HandlerInterceptor1"></bean>
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.syl.test.HandlerInterceptor2"></bean>
</mvc:interceptor>
</mvc:interceptors>

经测试:
拦截器1放行,拦截器2放行

​ preHandle方法按顺序执行,
​ postHandle和afterCompletion按拦载器配置的逆向顺序执行。

拦截器1放行,拦截器2拦截

​ 拦截器1放行,栏截器2 preHandle才会执行。
​ 拦截器2 preHandle不放行,拦截器2postHandle和afterCompletion不会执行。

​ 只要有一个拦截器不放行,所有的2postHandle都不会执行

​ 拦截器1的afterCompletion会执行

拦截器1拦截,拦截器2拦截

​ 拦载器1 preHandle不放行,postHandle和afterCompletion不会执行。中
​ 拦载器1 preHandle不放行,拦截器2不执行。

赏口饭吃吧!