SpringMVC拦截器
Posted jasonboren
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVC拦截器相关的知识,希望对你有一定的参考价值。
所谓拦截器,就是能够在进行某个操作之前拦截请求,如果请求符合条件就允许在往下执行。比如说,海关就是一个拦截器,他拦截进出口的货物,如果货物满足进出口条件,则放行,否则就拦截,退回处理。
要使用springmvc的拦截器,就需要对拦截器类进行定义和配置,拦截器可以通过两种方式来定义。
一种是实现HandleInterceptor接口,或者继承HandleInterceptor接口的实现类HandleInterceptorAdapter来定义,另一种是实现WebRequestInterceptor接口,或继承WebRequestInterceptor接口的实现类来定义。
例如实现HandleInterceptor接口
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest Request,HttpServletResponse Response, Object o) throws Exception {
//做一些操作
}
@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 {
//做一些操作
}
}
实现接口要实现三个方法 preHandle,postHandle,afterCompletion。
preHandle()方法:该方法会在控制器方法执行之前执行。其返回值表示是否中断后面的操作,返回值为true,表示继续向下执行,返回值为false,则中断后续所有操作。
postHandle()方法:该方法在控制器方法调用之后,且解析视图之前执行。可以通过该方法对请求域中的模型和视图做出进一步的修改。
afterCompletion()方法:该方法会在整个请求完成,即视图渲染结束之后执行。可以通过他执行一些资源清理,记录日志信息之类的操作。
使用拦截器,还需要在springmvc配置文件中配置
<!--配置拦截器-->
<mvc:interceptors>
<!--写在这个位置时,表示将拦截下面的所有请求-->
<bean class="com.itheima.core.interceptor.LoginInterceptor"/>
<mvc:interceptor>
<!--表示需要拦截的路径-->
<mvc:mapping path="/**"/>
<!--配置不需要拦截的路径-->
<mvc:exclude-mapping path=""/>
<bean class="com.itheima.core.interceptor.LoginInterceptor"/>
</mvc:interceptor>
//可以配置多个拦截器
...
</mvc:interceptors>
拦截器的执行流程,
如果是单个拦截器其执行流程为;
prehandle----Handle(也就是控制器里的方法)---postHandle----afterCompletion。
如果是多个拦截器,其执行流程将会发生变化:
假如有两个拦截器:
执行流程为:
preHandle1----preHandle2----Handle----postHandle2----postHandle1---afterCompletion2----afterCompletion1
多个拦截器存在时,其preHandle方法是按次序执行,其余的则是相反顺序执行。
以上是关于SpringMVC拦截器的主要内容,如果未能解决你的问题,请参考以下文章
Java 微服务 day02 源代码 SpringBoot 实战开发 SpringMVC高级配置:拦截器:HandlerExecutionChain