美文网首页
SpringMVC拦截器

SpringMVC拦截器

作者: 燕冷之 | 来源:发表于2018-09-04 20:46 被阅读0次

SpringMVC拦截器

拦截器的定义

自定义的拦截器需要实现一个接口HandlerInterceptor,并实现接口的三个方法:

public class UserHandlerInterceptor implements HandlerInterceptor {
    /**
    * 该方法在目标方法之前被调用
    * 若返回值为true,则继续调用后续的拦截器和目标方法
    * 若返回值为false,则不会再调用后续的拦截器和目标方法
    * 可以考虑做权限、日志、事务等
    */
    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
        return false;
    }
    
    /**
    * 该方法在目标方法调用之后、在视图被渲染之前执行
    * 可以对请求域中的属性或者视图做出修改
    */
    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {

    }
    
    /**
    * 该方法在渲染视图之后调用
    * 可以释放资源
    */
    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {

    }
}

拦截器的配置

<mvc:interceptors>
    <mvc:interceptor>
        <!--可以配置拦截器作用路径-->
        <mvc:mapping path="/login"/>
        <!--可以配置拦截器不作用路径-->
        <mvc:exclude-mapping path="/register"/>
        <bean class="com.controller.Interceptor.UserHandlerInterceptor"></bean>
    </mvc:interceptor>
</mvc:interceptors>

多个拦截器的执行顺序

假设有两个拦截器
1.第一个拦截器的preHandle()方法
2.第二个拦截器的preHandle()方法(如果返回false,直接到第一个拦截器的afterCompletion()方法)
3.HandlerAdapter#handle
4.第二个拦截器的postHandle()方法
5.第一个拦截器的postHandle()方法
6.DispatcherServlet
7.第二个拦截器的afterCompletion()方法
8.第一个拦截器的afterCompletion()方法

相关文章

网友评论

      本文标题:SpringMVC拦截器

      本文链接:https://www.haomeiwen.com/subject/tfbnwftx.html