首页 > 基础资料 博客日记
SpringMVC拦截器的使用
2024-01-31 16:22:59基础资料围观348次
文章SpringMVC拦截器的使用分享给大家,欢迎收藏Java资料网,专注分享技术知识
SpringMVC中的拦截器主要用于拦截控制器方法的执行。
SpringMVC配置拦截器
SpringMVC中的拦截器需要实现HandlerInterceptor
接口
public class FirstInterceptor implements HandlerInterceptor {
//该方法是在控制器方法执行前执行
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("FirstInterceptor->preHandle");
//返回false执行拦截,true放行
return HandlerInterceptor.super.preHandle(request,response,handler);
}
//该方法是在控制器方法执行后执行
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("FirstInterceptor->postHandle");
}
//该方法是在视图渲染后执行
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("FirstInterceptor->after");
}
}
拦截器中三个默认方法说明:
preHandle:控制器方法执行之前执行preHandle(),其boolean类型的返回值表示是否拦截或放行,返回true为放行,即调用控制器方法;返回false表示拦截,即不调用控制器方法。
postHandle:控制器方法执行之后执行postHandle()。
afterComplation:处理完视图和模型数据,渲染视图完毕之后执行afterComplation()
SpringMVC的拦截器三种配置方式
方式1:使用bean标签
<mvc:interceptors>
<bean class="com.evan.interceptor.FirstInterceptor"/>
</mvc:interceptors>
方式2:引入外部bean
<bean class="com.evan.interceptor.FirstInterceptor" id="firstInterceptor"/>
<mvc:interceptors>
<ref bean="firstInterceptor"/>
</mvc:interceptors>
方式3:使用注解方式
将拦截器的实现类注入到spring容器中
@Component //将实现类注入到容器中
public class FirstInterceptor implements HandlerInterceptor {}
开启组件扫描
<context:component-scan base-package="com.evan"/>
配置拦截器
<mvc:interceptors>
<!-- 扫描组件从Spring容器中获取实现类对象,该对象默认是实现类的驼峰类名 -->
<ref bean="firstInterceptor"/>
</mvc:interceptors>
结论:
以上三种方式:都是对所有请求进行拦截
bean标签和ref标签配置的拦截器默认对DispatcherServlet
处理的所有的请求进行拦截或放行。
排除指定的拦截请求
<mvc:interceptors>
<!--<bean class="com.evan.interceptor.FirstInterceptor"/>-->
<!--<ref bean="firstInterceptor"/>-->
<mvc:interceptor>
<!-- 配置需要拦截的请求的请求路径,/**表示所有请求 -->
<mvc:mapping path="/**"/>
<!-- 配置需要排除拦截的请求的请求路径-->
<mvc:exclude-mapping path="/test/hello"/>
<!-- 配置拦截器 -->
<ref bean="firstInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
多个拦截器的执行顺序
通过观察源码:
1、若每个拦截器的preHandle()都返回true,则多个拦截器的执行顺序是按照在SpringMVC配置文件的配置顺序执行。
说明:
preHandle()会按照配置的顺序执行(由上而下),而postHandle()和afterComplation()会按照配置的反序执行(由下而上)。
2、若多个拦截器中的某个拦截器的preHandle()返回false。preHandle()返回false和它之前的拦截器的preHandle()都会执行,postHandle()都不执行,返回false的拦截器之前的拦截器的afterComplation()会执行。
文章来源:https://www.cnblogs.com/lisong0626/p/17999308
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签: