1.简介
SpringMVC
的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。
拦截器和过滤器的区别在于拦截器使AOP思想的具体应用
- 过滤器
- servlet规范中的一部分,任何java web工程都可以使用
- 在url-pattern中配置了/*之后,可以对所有要访问的资源进行拦截
- 需要重写方法
- 拦截器
- SpringMVC框架自己的,只有使用了SpringMVC框架的工程才能使用
- 拦截器只会拦截访问的控制器方法, 如果访问的是jsp/html/css/image/js是不会进行拦截的
- 不需要重写方法
2.自定义拦截器
−−>新建一个Module,添加web支持💻
−−>配置web.xml,applicationContext.xml,添加一个controller的包💻
−−>编写测试💻
@RestController public class TestController { @GetMapping("/t1") public String test(){ System.out.println("TestController-->test()执行了"); return "ok"; } }
添加Artifact中的lib,以及配置Tomcat,启动测试出现,证明Spring配置好了
−−>编写拦截器💻
package com.hxl.config; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class MyInterceptor implements HandlerInterceptor { //在请求处理的方法之前执行 //return true;执行下一个拦截器 //如果返回false就不执行下一个拦截器 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("------------处理前------------"); return true; } //在请求处理方法执行之后执行 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("------------处理后------------"); } //在dispatcherServlet处理后执行,做清理工作. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("------------清理------------"); } }
−−>在applicationContext.xml中配置拦截器💻
<!--关于拦截器的配置--> <mvc:interceptors> <mvc:interceptor> <!--/** 包括路径及其子路径--> <!--/admin/* 拦截的是/admin/add等等这种 , /admin/add/user不会被拦截--> <!--/admin/** 拦截的是/admin/下的所有--> <mvc:mapping path="/**"/> <!--bean配置的就是拦截器--> <bean class="com.hxl.config.MyInterceptor"/> </mvc:interceptor> </mvc:interceptors>
前面的我们都不动,运行,我们可以看到效果
那么接下来就用一个实例来体验一下拦截器(登录)
在WEB-INF下的所有页面或者资源,只能通过controller或者servlet进行访问