1.自定义拦截器类 实现接口 | 继承类
实现接口Handlerinterceptor,必须重写三个方法.
继承HandlerinterceptorAdapter抽象类,可以有选择的实现我们需要的方法,不再强制.
package com.zzx.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @auther ZhengZiXuan
* @date 2021/3/5 10:45
* @desc SpringMVC自定义拦截器
*/
public class MyIntercept implements HandlerInterceptor {
/**
* @param request 请求对象(头,行,正文)
* @param response 响应对象(头,行,正文)
* @param handler 拦截到的目标处理器对象 ---> 目标Controller对象
* @return boolean 返回值为true 及放行,返回false即拦截不放行
* @throws Exception
* preHandle 在拦截目标类之前执行
* 一般适用于: 编码设置,权限检查,日志记录,事务开启等场景
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("MyIntercept.preHandle()方法执行了...");
StringBuffer requestURL = request.getRequestURL();
System.out.println("11111111111111111");
System.out.println("requestURL = "+requestURL);
// true放行,false拦截
return true;
}
/**
* @param request 处理器处理后的请求对象(头,行,正文)
* @param response 处理器处理后的响应对象(头,行,正文)
* @param handler 拦截到的目标处理器对象 ==>目标Controller对象
* @return modelAndView 处理器处理后的数据和页面
* @throws Exception
* preHandle 拦截目标类的目标方法执行后,返回视图前,再执行该方法
* 一般当需要将处理器返回的数据和页面再操作时可以使用...
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("后置postHandle执行了......");
System.out.println("2222222222222222222222");
}
/**
* @param request
* @param response
* @param handler
* @param e
* @throws Exception 处理器的异常
* 在preHandle执行后执行该方法,该方法最后执行
* 一般:做资源释放
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception e) throws Exception {
System.out.println("MyIntercept.afterCompletion() 执行了>>>>>>>>>");
System.out.println("3333333333333333");
}
}
2.将拦截器在SpringMVC.xml配置生效
<!--拦截器,可以配置多个拦截器-->
<mvc:interceptors>
<!--配置具体一个拦截器-->
<mvc:interceptor>
<!-- 拦截路径
拦截所有 /**
拦截指定路径 /redirect/a.do
拦截多层 /redirect/**
-->
<mvc:mapping path="/**"/>
<!--放行路径-->
<mvc:exclude-mapping path="/index.jsp"/>
<mvc:exclude-mapping path="/view/pl.jsp"/>
<!--拦截器-->
<bean class="com.zzx.interceptor.MyIntercept"></bean> <!--对应着我们自定义拦截器的地址-->
</mvc:interceptor>
</mvc:interceptors>
3.在web.xml文件下配置前端控制器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--=====================前端控制器========================-->
<servlet>
<servlet-name>dispathcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!--contextConfigLocation是固定写法-->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvcintercept.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispathcherServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>