Spring拦截器

本文详细介绍了SpringMVC拦截器Interceptor与传统Web Filter的区别,包括执行时机、应用场景,并通过示例展示了如何在Spring MVC中配置和使用自定义Interceptor。

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

springmvc中的拦截器interceptor类似于web开发中的filter,一般用于处理器的方法进行预处理和后

处理

拦截器(interceptor)与过滤器(filter)的区别

过滤器(filter)

Filter属于Servlet技术,只要是web工程都可以使用

filter主要由于对所有请求过滤

Filter的执行时机早于Interceptor

拦截器(interceptor)

Interceptor属于SpringMVC技术,必须要有SpringMVC环境才可以使用

Interceptor通常由于对处理器Controller进行拦截

Interceptor只能拦截dispatcherServlet处理的请求

编写一个拦截器

实现HandlerInterceptor接口,可根据选择重写preHandle,postHandle,afterCompletion方法

package com.gx.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;

import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class MyInterceptor1 implements HandlerInterceptor

{

        

/**

* 作用: 用于对拦截到的请求进行预处理,方法接收布尔(true,false)类型的返回值,返回

true:放行,false:不放行。

* 执行时机:在处理器方法执行前执行

* @param request 请求对象

* @param response 响应对象

* @param handler 拦截到的处理器方法

* @return 布尔值 true:放行,false:不放行

* @throws Exception 抛出的异常信息

*/@Override

public boolean preHandle(HttpServletRequest request,

HttpServletResponse response,

Object handler) throws Exception {

System.out.println("MyInterceptor1 preHandle \t"+handler);

return true;//放行

}

/**

* 作用: 用于对拦截到的请求进行后处理,可以在方法中对模型数据和视图进行修改

* 执行时机: 在处理器的方法执行后,视图渲染之前

* @param request 请求对象

* @param response 响应对象

* @param handler 拦截到的处理器方法

* @param modelAndView 处理器方法返回的模型和视图对象,可以在方法中修改模型和视图

* @throws Exception 抛出的异常信息

*/

@Override

public void postHandle(HttpServletRequest request,

HttpServletResponse response,

Object handler,

ModelAndView modelAndView) throws Exception {

System.out.println("MyInterceptor1 postHandle \t"+handler+";

图:"+modelAndView.getViewName()

+";Model"+modelAndView.getModel());

}

/**

* 作用: 用于在整个流程完成之后进行最后的处理,如果请求流程中有异常,可以在方法中获取

对象

* 执行时机: 视图渲染完成后(整个流程结束之后)

* @param request 请求对象

* @param response 响应对象

* @param handler 拦截到的处理器方法

* @param ex 异常信息

* @throws Exception 抛出的异常信息

*/

@Override

public void afterCompletion(HttpServletRequest request,

HttpServletResponse response,

Object handler, Exception ex) throws Exception {

System.out.println("MyInterceptor1 afterCompletion \t"+handler);

}

}

在select中配置拦截器

 

拦截器方法说明

preHandle方法

作用: 用于对拦截到的请求进行预处理,方法接收布尔(true,false)类型的返回值,返回

true:放行,false:不放行

执行时机: 在处理器方法执行前执行

方法参数:

1. request 请求对象

2. response 响应对象

3. handler 拦截到的处理器方法

postHandle方法

作用: 用于对拦截到的请求进行后处理,可以在方法中对模型数据和视图进行修改

执行时机: 在处理器的方法执行后,视图渲染之前

方法参数:

1. request 请求对象

2. response 响应对象

3. handler 拦截到的处理器方法

4. ModelAndView 处理器方法返回的模型和视图对象,可以在方法中修改模型和视图

afterCompletion方法

作用: 用于在整个流程完成之后进行最后的处理,如果请求流程中有异常,可以在方法中

获取对象

执行时机: 视图渲染完成后(整个流程结束之后)

方法参数:

1. request 请求参数

2. response 响应对象

3. handler 拦截到的处理器方法

4. ex 异常对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值