1、创建拦截器【com.item.handler】
通过【request】可以获取任何值
package com.item.handler; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Date; /** * 自定义拦截器类 */ public class MyInterceptor implements HandlerInterceptor {// 实现HandlerInterceptor接口 /** * (1) preHandle方法是进行处理器拦截用的,顾名思义,该方法将在Controller处理之前进行调用。 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println(new Date() + "--preHandle:" + request.getRequestURL()); StringBuffer url = request.getRequestURL(); if(url.substring(url.lastIndexOf("/")+1,url.length()).equals("GetName")){ System.out.println("------模糊查询方法------"); String nickName = request.getParameter("nickName"); System.out.println("获取的是nickName:"+nickName+",我可以根据获取的值判断是否是sql注入等操作"); } return true; } /** * 这个方法只会在当前这个Interceptor的preHandle方法返回值为true的时候才会执行。 */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println(new Date() + "--postHandle:" + request.getRequestURL()); } /** * 该方法将在postHandle请求完成之后,也就是DispatcherServlet渲染了视图执行 */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println(new Date() + "--afterCompletion:" + request.getRequestURL()); } } 在上面的实例中,我们定义了一个拦截器类 MyInterceptor ,通过实现 HandlerInterceptor 接口,该类具备了拦截器的功能。 MyInterceptor 中的方法执行顺序为 preHandle – Controller 方法 – postHandle – afterCompletion ,所以拦截器实际上可以对 Controller 方法执行前后进行拦截监控。 最后还有一个非常重要的注意点, preHandle 需要返回布尔类型的值。 preHandle 返回 true 时,对控制器方法的请求才能到达控制器,继而到达 postHandle 和 afterCompletion 方法;如果 preHandle 返回 false ,后面的方法都不会执行。
2、生效配置【com.item.handler】内创建【WebConfig】
如果想让配置器生效,还需要通过配置类进行相应配置。
package com.item.handler; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; /** * Web配置类 */ @Configuration public class WebConfig implements WebMvcConfigurer { /** * 添加Web项目的拦截器 */ @Override public void addInterceptors(InterceptorRegistry registry) { // 对所有访问路径,都通过MyInterceptor类型的拦截器进行拦截 registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**"); } }
3、拦截器效果:
4、拦截器作用
主要完成请求参数的解析、将页面表单参数赋给值栈中相应属性、执行功能检验、程序异常调试等工作,例如:登录校验、Token验证等。