概述
- 概念: 是一种动态拦截方法调用的机制,类似于过滤器。Spring框架中提供的,用来动态拦截控制器方法的执行。
- 作用: 拦截请求,在指定的方法调用前后,根据业务需要执行预先设定的代码。
interceptor快速入门
-
先创建一个类, 定义拦截器, 实现Handlerlnterceptor接口,并重写其所有方法。
@Component
public class LoginCheckInterceptor implements HandlerInterceptor {
@Override //目标资源方法执行前执行, 返回true放行, false不放行
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle...");
return true;
}
@Override //目标资源方法执行后执行
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle...");
}
@Override //视图渲染完毕后执行, 最后执行
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion...");
}
}
- 注册拦截器
-
再要定义一个类, 称为配置类, 实现WebMvcConfigurer接口, 并在该类上加注解@Configuration, 表明该类是Spring当中的一个配置类, 再重写接口中的方法addInterceptors, 注册拦截器并指定拦截路径
@Configuration //配置类
public class WebConfig implements WebMvcConfigurer {
@Autowired
private LoginCheckInterceptor loginCheckInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginCheckInterceptor).addPathPatterns("/**");
}
}
拦截器--拦截路径
-
拦截器可以根据需求, 配置不同的拦截路径
-
常见拦截路径:
拦截器--执行流程
过滤器和拦截器的区别
- 接口规范不同: 过滤器需要实现Filter接口,而拦截器需要实现HandlerInterceptor接口
- 拦截范围不同: 过滤器Filter会拦截所有的资源, 而Interceptor只会拦截Spring环境中的资源