SpringMVC自定义拦截器

本文详细介绍了 SpringMVC 中的拦截器机制,包括如何自定义拦截器及其实现方法preHandle、postHandle 和 afterCompletion的作用。此外还展示了如何在 SpringMVC 配置文件中设置拦截器来对请求进行拦截。

Spring MVC也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现HandlerInterceptor接口

– preHandle():这个方法在业务处理器处理请求之前被调用,在该方法中对用户请求 request 进行处理。如果程序员决定该拦截器对请求进行拦截处理后还要调用其他的拦截器,或者是业务处理器去进行处理,则返回true;如果程序员决定不需要再调用其他的组件去处理请求,则返回false。

– postHandle():这个方法在业务处理器处理完请求后,但是DispatcherServlet 向客户端返回响应前被调用,在该方法中对用户请求request进行处理。

– afterCompletion():这个方法在 DispatcherServlet 完全处理完请求后被调用,可以在该方法中进行一些资源清理的操作

举例:

SpringMVC配置文件中增加这一段

	<mvc:interceptors>
		<!-- 适用于所有请求 -->
		<bean id="userInterceptor" class="jv.springmvc.requestmapping.UserInterceptor"></bean>
		<mvc:interceptor>
			<!-- 通过<mvc:interceptor>可以配置拦截器只拦截指定的path或者不拦截指定的path -->
			<mvc:mapping path="/rm/testPojo"/>
			<bean id="userInterceptor2" class="jv.springmvc.requestmapping.UserInterceptor2"></bean>
		</mvc:interceptor>
	</mvc:interceptors>

 

拦截器:需实现HandlerInterceptor接口

package jv.springmvc.requestmapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class UserInterceptor implements HandlerInterceptor{

	/**
	 * 调用目标方法之前被执行
	 * 注:
	 * 返回值为false,则后续的拦截器和目标方法不会被执行,相反如果返回值是true,则会继续后面的拦截器和目标方法
	 */
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		System.out.println("UserInterceptor preHandle");
		return true;
	}
	
	/**
	 * INVOKE目标方法之后,渲染视图之前被执行
	 */
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		System.out.println("UserInterceptor postHandle");
	}

	/**
	 * 渲染视图之后被执行
	 */
	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		System.out.println("UserInterceptor afterCompletion");
	}

}

 

拦截器执行顺序:

123621_9FK0_3049601.png

preHandle方法是按照从小到大顺序执行

postHandle方法是按照从大到小顺序执行

afterCompletion方法是按照从大到小顺序执行(但是只包含了preHandle执行过的拦截器)

感兴趣的同学可以DEBUG看看每个拦截器的执行方法中的循环

转载于:https://my.oschina.net/u/3049601/blog/1528127

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值