SpringMVC拦截器
拦截器(interceptor)的作用
-
SpringMVC的拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。
将拦截器按一定的顺序连接成一条链,这条链称为拦截器(Interceptor Chain)。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按之前定义的顺序被调用。拦截器也是AOP思想的具体实现。
拦截器和过滤器的区别

拦截器快速入门
自定义拦截器的步骤:
-
创建拦截器实现HandlerInterceptor接口
package com.study.interceptor; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * @title: MyInterceptor1 * @Author Mj * @Date: 2022/3/25 18:38 * @Version 1.0 */ public class MyInterceptor1 implements HandlerInterceptor { //目标方法执行之前执行 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("preHandler..."); String param = request.getParameter("param"); if ("yes".equals(param)){ return true; }else { request.getRequestDispatcher("/error.jsp").forward(request,response); return false; } // return true; //返回true表示放行,返回false表示拦截 } //目标方法执行之后,视图对象返回之前执行 @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { modelAndView.addObject("name","itheima"); System.out.println("postHandler..."); } //流程都执行完毕之后执行 @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("afterCompletion..."); } } -
在spring-mvc.xml中配置拦截器
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" 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 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <!--1、mvc注解驱动--> <mvc:annotation-driven/> <!--2、配置视图解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/"/> <property name="suffix" value=".jsp"/> </bean> <!--3、静态资源权限开放--> <mvc:default-servlet-handler/> <!--4、组件扫描 扫描Controller--> <context:component-scan base-package="com.study.controller"/> <!--配置拦截器--> <mvc:interceptors> <!--执行顺序和这里的配置顺序相关--> <mvc:interceptor> <!--对哪些资源执行拦截操作--> <mvc:mapping path="/**"/> <bean class="com.study.interceptor.MyInterceptor1"/> </mvc:interceptor> <mvc:interceptor> <!--对哪些资源执行拦截操作--> <mvc:mapping path="/**"/> <bean class="com.study.interceptor.MyInterceptor2"/> </mvc:interceptor> </mvc:interceptors> </beans> -
测试拦截器的拦截效果
package com.study.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; /** * @title: TargetController * @Author Mj * @Date: 2022/3/25 16:39 * @Version 1.0 */ @Controller public class TargetController { @RequestMapping("/target") public ModelAndView show(){ System.out.println("目标资源执行..."); ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("name","itcast"); modelAndView.setViewName("index"); return modelAndView; } }
拦截器方法说明

本文介绍了SpringMVC中的拦截器概念及其应用。通过自定义拦截器实现对请求的预处理和后处理,展示了如何创建并配置拦截器,以及它们在实际项目中的使用流程。
1334

被折叠的 条评论
为什么被折叠?



