SpringMVC框架 (10) —— SpringMVC的拦截器

本文介绍了SpringMVC的拦截器机制,包括自定义拦截器的实现、拦截器的配置过程,以及SpringMVC控制器Controller的生命周期。拦截器类似于Servlet的过滤器,用于Controller的预处理和后处理,其主要方法有preHandle、postHandle和afterCompletion。此外,还讨论了Controller的单例和多例模式以及成员变量的处理注意事项。

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

SpringMVC的拦截器

拦截器 : Interceptor
Spring MVC 的拦截器类似于Servlet 开发中的过滤器Filter,用于对Controller进行预处理和后处理。
使用SpringMVC拦截器步骤:
1)定义拦截器类,实现接口 org.springframework.web.servlet.HandlerInterceptor
2)在applicationContext.xml中配置拦截器

拦截器方法的执行时机:
1):preHandle:控制器方法执行之前执行,返回结果为true表示放行,如果返回为false,表示拦截(可以做权限拦截,登录检查拦截).
2):postHandle:控制器方法执行后,视图渲染之前执行(可以加入统一的响应信息).
3):afterCompletion:视图渲染之后执行(处理Controller异常信息,记录操作日志,清理资源等)

自定义拦截器

public class CheckLoginInterceptor implements HandlerInterceptor {
	//1):preHandle:控制器方法执行之前执行,返回结果为true表示放行,如果返回为false,表示拦截(可以做权限拦截,登录检查拦截).
	// true : 放行  false :不放行
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		
		System.out.println("拦截器执行了......");
		//从Session中获取登录信息
		String username = (String)request.getSession().getAttribute("username");
		System.out.println(username);
		
		if(username !=null) {
			//放行
			return true;
		}else {
			//跳转到登录页面去
			response.sendRedirect(request.getContextPath()+"/login.jsp");
			return false;
		}
	}
	
	//postHandle:控制器方法执行后,视图渲染之前执行(可以加入统一的响应信息).
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
	}
	
	//afterCompletion:视图渲染之后执行(处理Controller异常信息,记录操作日志,清理资源等
	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
	}
}

拦截器的配置的配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        ">

		<!-- 配置springmvc的注解驱动 -->
		<mvc:annotation-driven/>
	
		
		
		<!-- 配置拦截器 :可以有多个拦截器-->
		<mvc:interceptors>
			<!--配置检查登录拦截器  -->
			<mvc:interceptor>
				
				<!-- 配置拦截的规则
				    只会拦截 控制器请求,不会拦截jsp页面
					/*  
						只能拦截一级 如 : /list.do /delete.do
						如:/user/list.do , /user/delete.do 二级 不能拦截
					/** 
						可以拦截多级 无论几级都可以 如  /a/b/c/d/list.do
				 -->
				<mvc:mapping path="/**"/>
				
				<!-- 排除拦截的地址,多个地址使用逗号隔开
					/user/login.do
					
					
				 -->
				<mvc:exclude-mapping path="/user/login.do"/>
			
				<!-- 拦截器的类型 -->
				<bean class="cn.zj.ssm.interceptor.CheckLoginInterceptor"/>
			
			</mvc:interceptor>
		</mvc:interceptors>
		
		
</beans>


SpringMVC 控制器 Controller的生命周期

Spring 容器创建的对象默认 都是单例 对象

SpringMVC对象 Controller的对象的创建有三种情况

Request : 在用户的一次请求中生效(用户每次请求都会创建Controller对象)多例
Session : Controller对象在一次会话中创建一个对象

如果控制器中有成员变量 设置或者赋值操作,必须使用 request 返回

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值