springmvc中拦截器

本文深入探讨SpringMVC中的拦截器机制,介绍如何通过实现HandlerInterceptor接口来控制处理器的执行流程,包括预处理(preHandle)、后处理(postHandle)及完成处理(afterCompletion)等阶段。同时,详细说明了拦截器的配置方法,以及与过滤器(Filter)的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在springmvc,为了更好控制处理器,spring提供了拦截器,用于介入控制器的执行。

只需要定义实现HandlerInterceptor接口,配置拦截地址即可。

1.实现HandlerInterceptor接口

package com.zw.interceptor;

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

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


public class MyInterceptor  implements HandlerInterceptor {
	/**
	 * 	拦截器中第一个执行的方法 : 返回值为true时 放行  为 false 则拦截
	 * 	request   : HTTP请求对象
	 *  response  : HTTP响应对象
	 *  handler  : 待执行的方法
	 */
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		System.out.println("handler:"+handler);
		System.out.println("======preHandle=========");
		return true;
	}
	
	/**
	 * postHandle 在具体的handler执行完成后执行
	 * 	在具体的handle执行完成后 但是 视图解析完成前
	 */
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		modelAndView.addObject("key", "我是在拦截器中放入的参数");
		System.out.println("============postHandle==========");
	}
	/**
	 * afterCompletion 在具体的handler执行完成后执行
	 * 	视图解析后
	 */
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		System.out.println("===========afterCompletion============");
	}

}

2.配置拦截器

<mvc:interceptors>
    <mvc:interceptor>
        <!-- 拦截地址 -->
		<!-- 拦截所有的路径 -->
		<mvc:mapping path="/**"/>
		<!-- 排除地址 -->
		<mvc:exclude-mapping path="/test2.do"/>
		<mvc:exclude-mapping path="/test3.do"/>
		<!-- 具体的拦截器 -->
		<bean id="myInterceptor" class="com.zw.interceptor.MyInterceptor" />
	</mvc:interceptor>
</mvc:interceptors>

注意

springmvc的拦截器,主要拦截Handler,由于拦截器是在DispatchServlet中执行,所以若你的url地址,根据不走DispatchServlet,那么拦截器将不会拦截。

在web项目中,一定存在filter但是未必存在HandlerInterceptor,而Filter的拦截是针对所有的请求,但是Interceptor针对的具体的Handler。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值