文章目录



SpringMVC拦截器

拦截器(interceptor)的作用

Spring MVC 的 ​​拦截器​​​ 类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行​​预处理​​​和​​后处理​​。

将拦截器按一定的顺序联结成一条链,这条链称为​​拦截器链(Interceptor Chain)​​。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。拦截器也是AOP思想的具体实现。

拦截器和过滤器区别

七、SpringMVC拦截器_spring

拦截器是快速入门

自定义拦截器很简单,只有如下三步:

① 创建拦截器类实现HandlerInterceptor接口
② 配置拦截器
③ 测试拦截器的拦截效果

① 创建拦截器类实现HandlerInterceptor接口

​MyInterceptor.java​

public class MyInterceptor implements HandlerInterceptor {

// 在目标方法执行之前执行
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

System.out.println("preHandle...");
String param = request.getParameter("param");
if ("yes".equals(param)){
return true;
}else {
request.getRequestDispatcher("/error.jsp").forward(request, response);
return false; // true代表放行, false 代表不放行
}
}
// 在目标方法执行之后 视图对象返回之前执行
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
modelAndView.addObject("name", "setwxx");
System.out.println("postHandle...");
}
// 在整个流程执行完成后 执行
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion...");
}
}

​MyInterceptor2.java​

package com.lzjtu.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 MyInterceptor2 implements HandlerInterceptor {

// 在目标方法执行之前执行
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

System.out.println("preHandle2...");
return true;
}
// 在目标方法执行之后 视图对象返回之前执行
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle2...");
}
// 在整个流程执行完成后 执行
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion2...");
}
}

② 配置拦截器

<!--    开放静态资源-->
<mvc:default-servlet-handler />

<!-- 配置拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<!-- 对哪些资源进行拦截操作-->
<mvc:mapping path="/**"/>
<bean class="com.lzjtu.interceptor.MyInterceptor" />
</mvc:interceptor>
<mvc:interceptor>
<!-- 对哪些资源进行拦截操作-->
<mvc:mapping path="/**"/>
<bean class="com.lzjtu.interceptor.MyInterceptor2" />
</mvc:interceptor>
</mvc:interceptors>

③ 测试拦截器的拦截效果(编写目标方法)

package com.lzjtu.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class TargetController {

@RequestMapping("/target")
public ModelAndView show(){

System.out.println("目标资源执行......");
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("name", "wxx");
modelAndView.setViewName("index");
return modelAndView;
}
}

③ 测试拦截器的拦截效果(访问网址)

http://localhost:8080/target

七、SpringMVC拦截器_mvc_02

拦截器方法说明

七、SpringMVC拦截器_拦截器_03

知识要点

自定义拦截器步骤

① 创建拦截器类实现HandlerInterceptor接口
② 配置拦截器
③ 测试拦截器的拦截效果