文章目录
SpringMVC拦截器
拦截器(interceptor)的作用
Spring MVC 的 拦截器
类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理
和后处理
。
将拦截器按一定的顺序联结成一条链,这条链称为拦截器链(Interceptor Chain)
。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。拦截器也是AOP思想的具体实现。
拦截器和过滤器区别
拦截器是快速入门
自定义拦截器很简单,只有如下三步:
① 创建拦截器类实现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;
public class TargetController {
("/target")
public ModelAndView show(){
System.out.println("目标资源执行......");
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("name", "wxx");
modelAndView.setViewName("index");
return modelAndView;
}
}
③ 测试拦截器的拦截效果(访问网址)
http://localhost:8080/target
拦截器方法说明
知识要点
自定义拦截器步骤
① 创建拦截器类实现HandlerInterceptor接口
② 配置拦截器
③ 测试拦截器的拦截效果