SpringMVC-14 自定义拦截器

一、关于自定义拦截器

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

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

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


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


二、拦截器方法执行顺序



三、实现自定义拦截器

1、实现HandlerInterceptor接口,实现三个方法

package com.weixuan.springmvc.interceptors;

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

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

public class FirstInterceptors implements HandlerInterceptor{

	/**
	 * 该方法在目标方法之前被调用.
	 * 若返回值为 true, 则继续调用后续的拦截器和目标方法. 
	 * 若返回值为 false, 则不会再调用后续的拦截器和目标方法. 
	 * 
	 * 可以考虑做权限. 日志, 事务等. 
	 */
	@Override
	public boolean preHandle(HttpServletRequest req, HttpServletResponse res,
			Object obj) throws Exception {
		
		System.out.println(" [preHandle] ");
		return true;
		
	}
	
	/**
	 * 渲染视图之后被调用. 释放资源
	 */
	@Override
	public void afterCompletion(HttpServletRequest req,
			HttpServletResponse res, Object obj, Exception e)
			throws Exception {
		System.out.println(" [afterCompletion] ");
	}

	/**
	 * 调用目标方法之后, 但渲染视图之前. 
	 * 可以对请求域中的属性或视图做出修改. 
	 */
	@Override
	public void postHandle(HttpServletRequest req, HttpServletResponse res,
			Object obj, ModelAndView ma) throws Exception {
		System.out.println(" [postHandle] ");
	}



}

2、在配置文件里面配置自定义拦截器

	<!-- 配置自定义拦截器 -->
	<mvc:interceptors>
		<bean class="com.weixuan.springmvc.interceptors.FirstInterceptors"></bean>
	</mvc:interceptors>


四、其他配置


<mvc:interceptors></mvc:interceptors>里面还可以配置一个 <mvc:interceptor></mvc:interceptor>结点

	<!-- 配置自定义拦截器 -->
	<mvc:interceptors>
		<bean class="com.weixuan.springmvc.interceptors.FirstInterceptors"></bean>
		<mvc:interceptor>
		<!-- 配置作用路径,也可以是不作用的路径 <mvc:exclude-mapping path=""/> -->
			<mvc:mapping path="/emps"/>
			
			<bean class="com.weixuan.springmvc.interceptors.SecondInterceptors"></bean>
		</mvc:interceptor>
	</mvc:interceptors>


五、多个拦截器的执行顺序

都返回true


first 返回false,只执行firstinterceptor的pre方法

first true,second false



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值