SpringMVC中的拦截器
目录
11、拦截器
11.1书写拦截器的步骤
一、首先需要在SpringMVC.xml中配置拦截器
<!-- 配置拦截器-->
<mvc:interceptors>
<!-- 直接配置拦截器-->
<!-- <bean class="com.qc.interceptor.FirstInterceptor"></bean>-->
<!-- <ref bean="firstInterceptor"/>-->
<!-- 配置精确的拦截器-->
<mvc:interceptor>
<!-- 配置拦截器的路径-->
<mvc:mapping path="/**"/>
<!-- 配置需要排除的路径-->
<mvc:exclude-mapping path="/test/abc"/>
<mvc:exclude-mapping path="/"/>
<ref bean="firstInterceptor"></ref>
</mvc:interceptor>
<!--精确配置拦截器二-->
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/test/abc"/>
<mvc:exclude-mapping path="/"/>
<ref bean="secondInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
上面的代码中提到了两种方法配置拦截器(直接配置,精确配置),更推荐使用精确配置
二、处理完配置文件进行配置类的书写书写的类需要实现HandlerInterceptor接口
SpringMVC的拦截器有三个抽象方法
-
preHandle:控制器方法执行之前执行preHandle(),其boolean类型的返回值表示拦截或放行,返回true为放行,即可以调用控制方法;返回false表示拦截,即不可以调用控制器方法。
-
postHandle:控制器方法执行之后执行postHandle()
-
afterCompletion:处理万视图和模型数据,渲染视图完毕之后执行
@Component
public class FirstInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("FirstInterceptor...preHandle");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("FirstInterceptor...postHandle");
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("FirstInterceptor...afterCompletion");
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}
11.2多个拦截器的执行顺序
⑴如果每个拦截器的preHandle()都返回true
此时多个拦截器的执行顺序和拦截器在SpringMVC配置文件中的配置顺序有关:
preHandle()会按照配置的顺序执行,而其它两个postHandle和afterCompletion会按照配置的逆序执行
⑵如果某个拦截器的preHandle()返回了false
preHandle()返回false和它之前的拦截器的preHanlde()都会执行,postHandle()都不执行,返回false的拦截器之前的拦截器的afterCompletion会执行
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?