SpringMVC拦截器(Interceptor)
SpringMVC中的拦截器作用类似Servlet中的Filter,用于对处理器进行预处理与后处理
将拦截器按一定顺序连成一条链,这条链被称为拦截器链(Interceptor Chain),在访问被拦截的方法或字段时,拦截器链就会按照指定顺序执行,这也是AOP思想的体现
拦截器与过滤器的区别
区别 |
过滤器 |
拦截器 |
使用范围 |
是servlet规范中的一部分,任何JavaWeb工程都可以使用 |
是SpringMVC框架所封装的,只有使用SpringMVC框架的工程才可以使用 |
拦截范围 |
在url-pattern中配置了/*的情况下,可以对所有访问资源进行过滤 |
只能拦截访问的控制器中的业务方法,如果访问的是.jsp.html.css.img等资源文件,是无法拦截的 |
拦截器基本操作
1. 创建拦截器类,实现HandlerInterceptor接口、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| public class MyInterceptor implements HandlerInterceptor {
@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("在目标方法执行之前执行..."); return true; }
@Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("在目标方法执行完成之后,视图对象返回之前 执行..."); }
@Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("在视图返回之后执行..."); } }
|
2. 配置拦截器
1 2 3 4 5 6 7 8
| <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="cn.ywrby.interceptor.MyInterceptor"/> </mvc:interceptor> </mvc:interceptors>
|
3. 测试拦截器效果
控制器实现
1 2 3 4 5 6 7 8 9 10 11 12
| @Controller public class TargetController {
@RequestMapping("/show") public ModelAndView show(){ System.out.println("目标资源执行"); ModelAndView modelAndView=new ModelAndView(); modelAndView.addObject("username","Leslie"); modelAndView.setViewName("index"); return modelAndView; } }
|
jsp页面实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <%-- Created by IntelliJ IDEA. User: renboyu010214 Date: 2021/3/14 Time: 12:54 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <h1>Hello world!${username}</h1>
</body> </html>
|
访问控制器业务方法
控制台输出