SpringMvc的拦截器

1:写个自定义的拦截器。继承HandlerInterceptor

 1 package com.ssm.interceptor;
 2 
 3 import org.springframework.web.servlet.HandlerInterceptor;
 4 import org.springframework.web.servlet.ModelAndView;
 5 
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8 
 9 public class MyInterceptor implements HandlerInterceptor {
10 
11     /*
12     执行时机:会先到拦截器的preHandle方法。
13               这个方法是在目标方法前被执行。
14     return true 正常执行。
15     return false 如果是返回false的话,后续就不会执行了。
16     作用:会在这个方法中来做权限。日志,事务等的操作。
17      */
18     public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
19     System.out.println("拦截器的preHandle方法");
20     return true;
21 }
22     /*
23     执行时机:目标方法执行完,渲染视图前执行的这个方法。
24     作用:用来请求域中的属性或视图做出修改。
25      */
26 public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
27     System.out.println("拦截器的postHandle方法");
28 }
29     /*
30     执行时机:渲染视图之后。
31     作用:释放资源。
32      */
33 
34 public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
35     System.out.println("拦截器的afterCompletion方法");
36 }
37 }

然后在spring-mvc的xml文件中配置上。也就是放到spring的IOC中。

1 <mvc:interceptors>
2         <mvc:interceptor>
3             <!--在哪个路径下加上哪个拦截器-->
4             <mvc:mapping path="/emps"/>
5             <bean class="com.ssm.interceptor.SecondInterceptor"/>
6         </mvc:interceptor>
7     </mvc:interceptors>

常用场景

1、日志记录:记录请求信息的日志,以便进行信息监控、信息统计、计算PV(Page View)等。

2、权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接返回到登录页面;

3、性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时间,在处理完后记录结束时间,从而得到该请求的处理时间(如果有反向代理,如apache可以自动记录);

4、通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用,还有如提取Locale、Theme信息等,只要是多个处理器都需要的即可使用拦截器实现。

多个拦截器的执行顺序:

第一个拦截器return false:

  后面的都不会执行。

第二个拦截器return false:

  

原文地址:https://www.cnblogs.com/bulrush/p/8677624.html