SpringMVC 拦截器应用 2021-09-20

SpringMVC 应用开发

1 基础概念介绍
2 返回值处理
3 参数绑定处理
4 RequestMapping注解
5 RESTful支持
6 拦截器应用
7 CORS跨域解决方案
8 Mock测试(模拟测试)
9 ControllerAdvice
10 乱码解决
11 非注解开发方式



处理器拦截器 是针对 处理器进行配置。根据请求url 在处理映射器中 找对应的 处理器(Handler Controller 类)。

一、处理器拦截器介绍

  • SpringMVC 拦截器( Interceptor )实现对每一个请求处理前后进行相关的业务处理,类似与
    servlet 中的Filter。
  • SpringMVC 中的 Interceptor 拦截请求是通过 HandlerInterceptor 接口来实现的。

在 SpringMVC 中定义一个 Interceptor 非常简单,主要有4种方式:

  1. 实现 SpringMVC 的 HandlerInterceptor 接口;
  2. 继承实现了 HandlerInterceptor 接口的类,比如 SpringMVC 已经提供的实现了
    HandlerInterceptor 接口的抽象类 HandlerInterceptorAdapter ;
  3. 实现 SpringMVC 的 WebRequestInterceptor 接口;
  4. 继承实现了 WebRequestInterceptor 的类;

二、定义拦截器

处理器拦截器有三种方法

  1. 请求过程中拦截器: perHandler
  2. 响应过程中拦截器:
    • postHandler 没有处理 Model and View 对象之前。
    • afterHandler

实现 HandlerIntercepter 接口:

public class MyHandlerIntercepter implements HandlerInterceptor {
    //Handler执行前调用 
    // 应用场景:登录认证、身份授权 
    // 返回值为true则是放行,为false是不放行
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return false;
    }

    //进入Handler开始执行,并且在返回ModelAndView之前调用
    // 应用场景:对ModelAndView对象操作,可以把公共模型数据传到前台,可以统一指定视图
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
            throws Exception {
    }

    //执行完Handler之后调用 
    // 应用场景:统一异常处理、统一日志处理
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
    }
}

三、 配置拦截器

SpringMVC 拦截器是绑定在 HandlerMapping 中的,即:如果某个 HandlerMapping 中配置拦截,则
该 HandlerMapping 映射成功的 Handler 会使用该拦截器。
SpringMVC 的全局拦截器配置,其实是把配置的拦截器注入到每个已初始化的 HandlerMapping 中
了。

<!-- 配置全局mapping的拦截器 --> 
	<mvc:interceptors> 
		<!-- 公共拦截器可以拦截所有请求,而且可以有多个 -->
		<bean class="com.kkb.ssm.interceptor.MyHandlerInterceptor"/>
		<bean class="com.kkb.ssm.interceptor.MyHandlerInterceptor2"/> 
		<!-- 如果有针对特定URL的拦截器,则进行以下配置 -->
		<mvc:interceptor> 
			<!-- /**表示所有URL和子URL路径 -->
			<mvc:mapping path="/orders/**"/> 
			<!-- 特定请求的拦截器只能有一个 -->
			<bean class="com.kkb.ssm.interceptor.MyHandlerInterceptor3"/>
		</mvc:interceptor>
	</mvc:interceptors>

多拦截器拦截规则
如果有多个拦截器,那么配置到springmvc.xml中最上面的拦截器,拦截优先级最高。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring MVC 拦截(Interceptor)是一种强大的机制,它可以拦截客户端请求并在控制处理请求之前或之后执行一些操作。拦截可以用于许多用例,例如身份验证、日志记录、性能监视、跨站点请求伪造(CSRF)防护等。 在 Spring MVC 中,拦截是基于 Java 的接口 org.springframework.web.servlet.HandlerInterceptor 实现的。此接口定义了三个方法,它们是: - preHandle(): 在控制处理请求之前调用,返回值为布尔类型。如果该方法返回 true,则继续执行后续拦截或者控制处理请求;如果该方法返回 false,则停止执行后续拦截或者控制处理请求。 - postHandle(): 在控制处理请求之后、视图呈现之前调用。可以通过该方法修改 ModelAndView 中的模型数据或者视图。 - afterCompletion(): 在视图呈现之后调用,用于清理资源。 要使用拦截,需要在 Spring MVC 配置文件中进行配置。可以通过 <mvc:interceptors> 标签或者实现 WebMvcConfigurer 接口进行配置。以下是一个拦截的示例代码: ```java public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 在控制处理请求之前执行 return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // 在控制处理请求之后、视图呈现之前执行 } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // 在视图呈现之后执行 } } ``` 在配置文件中进行配置: ```xml <mvc:interceptors> <bean class="com.example.MyInterceptor" /> </mvc:interceptors> ``` 这样就可以将 MyInterceptor 拦截应用到所有的控制中了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值