当前位置:   article > 正文

Spring——拦截器_spring拦截器的作用

spring拦截器的作用

| 一、什么是拦截器
Spring MVC中的拦截器(Interceptor),它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等。

1、拦截器的定义
要使用Spring MVC中的拦截器,就需要对拦截器类进行定义和配置。通常拦截器类可以通过两种方式来定义:

1、通过实现HandlerInterceptor接口,或继承HandlerInterceptor接口的实现类(如HandlerInterceptorAdapter)来定义。

2、通过实现WebRequestInterceptor接口,或继承WebRequestInterceptor接口的实现类来定义。

以实现HandlerInterceptor接口方式为例,自定义拦截器类的代码如下:
在这里插入图片描述

public class MyInterceptor implements HandlerInterceptor{
	//在执行方法之前执行拦截器
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		// TODO Auto-generated method stub
		System.out.println("我是一个拦截器哟!");
		response.sendRedirect("test.jsp");
		return false;
	}
	//在用户提交数据之后,再拦截一次
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		// TODO Auto-generated method stub
		HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
	}
	//整个请求完成,即视图渲染结束之后执行
	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		// TODO Auto-generated method stub
		HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

2、拦截器的配置
要使自定义的拦截器类生效,还需要在Spring MVC的配置文件中进行配置。
在这里插入图片描述

<!--拦截器  -->
  	<mvc:interceptors>
  		<mvc:interceptor>
  			<!--拦截所有  -->
  			<mvc:mapping path="/**"/>
  			<!--不拦截  -->
  			<mvc:exclude-mapping path="/first"/>
  			<!--拦截的类  -->
  			<bean class="com.createblue.service.MyInterceptor"></bean>
  		</mvc:interceptor>
  	</mvc:interceptors>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

二、单个拦截器和多个拦截器执行的顺序
1、单个拦截器,在程序中的执行流程如下图所示:
在这里插入图片描述

2、多个拦截器(假设有两个拦截器Interceptor1和Interceptor2,并且在配置文件中, Interceptor1拦截器配置在前),在程序中的执行流程如下图所示:在这里插入图片描述
个人总结:
当遇到多个拦截器时,假如有1和2两个拦截器时,相当于一个大的if结构,最后才执行外层,先进入1的拦截器,执行preHandle为true时,紧接着执行2的preHandle,再执行2的postHandle,再又返回到执行1的postHandle,然后又回到2的afterHandle,最后到1的afterHandle

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/972881
推荐阅读
相关标签
  

闽ICP备14008679号