开发环境
基于:IntelliJ IDEA
、Maven构建工具
、JDK1.8
、SpringBoot 2.3.4
、Spring4.3.28
编写。
官人如需使用 IDEA 请阅读教程:IntelliJ IDEA
官人如需使用 Maven 请阅读教程:Maven 构建工具的下载与安装
更多干货
请参考:《穿越 Java 之 语法基础篇》 系列文章
请参考:《穿越 Java 之 Web基础篇 》系列文章
请参考:《穿越 Java 之 开发必备框架篇 》 系列文章
请阅读:《穿越 Java 之 SpringBoot框架篇》系列文章
请阅读:《穿越 Java 之 SpringCloud微服务架构篇》 系列文章
理解
- 从功能上来说,跟以前的过滤器是一样的。
开发流程
-
定义一个实现了
HandlerInterceptor
接口的过滤器。 -
还有一种选择途径是选择继承
HandlerInterceptorAdapter
类。
public class MyHandlerInterceptor1 implements HandlerInterceptor {
//处理器方法调用之前执行的方法,如果此方法返回 false , 则表示进行拦截。
//如果返回了true, 表示放行。
//开发需求中的 90 % 只需要重写 preHandle 方法。
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("MyHandlerInterceptor1 进行了preHandle 前置拦截 ");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println(handler.getClass());//可能结果1:标记了@Controller注解的类 结果2:类中的某个方法 Method.class
System.out.println(modelAndView); //就是处理完之后的结果(视图的名字、 存储的数据)
System.out.println("MyHandlerInterceptor1 进行了postHandle 后置拦截,此时页面还没有渲染。");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("MyHandlerInterceptor1 进行了afterCompletion 拦截,支此,这个请求就准备好发送回客户端了");
}
}
配置
-
配置该过滤器,实现某些请求路径的拦截
<mvc:interceptors> <!--定义过滤器链中的一个 mvc:mapping 标签用于配置 对应的要拦截的路径 mvc:exclude-mapping 标签用于配置 要排除的路径【可选】 bean 或 ref 标签,用于指定对应的 HandlerInterceptor 实现类 --> <mvc:interceptor> <mvc:mapping path="/**"/> <!-- <mvc:exclude-mapping path="/admin/*.css"/>--> <bean class="com.example.MyHandlerInterceptor1"/> </mvc:interceptor> <!--当直接在此处定义bean指向 HandlerInterceptor 实现类的时候,表示所有请求都会进行拦截--> <bean class="com.example.MyHandlerInterceptor2"/> </mvc:interceptors> <!--拦截器执行的顺序跟 mvc:interceptors 中配置的顺序一致。-->