SpringBoot 拦截器Intercepto的创建与基本使用
介绍
拦截器和过滤器的功能都差不多,拦截器是SpringBoot的,而且过滤器是Servlet的
SpringBoot过滤器
拦截器-过滤器 执行顺序
发起请求-》过滤器-》拦截器-》接口
创建拦截器
实现HandlerInterceptor 的接口,并且实现他都三个方法
- preHandle: 进入controller前执行 true放行 false不放行
- postHandle: controller运行完成后执行
- afterCompletion: 视图渲染完毕后执行 最后执行的方法
三个方法都默认实现,按要求保留即可
@Component //交给IOC容器管理
public class RequestInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//进入controller前执行 true放行 false不放行
//拦截到执行的操作
// return HandlerInterceptor.super.preHandle(request, response, handler);
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
//controller运行完成后执行
// HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
//视图渲染完毕后执行 最后执行的方法
// HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}
注册拦截器(配置类)
配置类继承接口WebMvcConfigurer ,并实现他都addInterceptors方法,
@Configuration //表示该类为配置类
public class WebConfig implements WebMvcConfigurer {
@Autowired
private RequestInterceptor interceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(interceptor).addPathPatterns("/**");
//拦截所有的请求
// registry.addInterceptor(interceptor)
// .addPathPatterns("/user")//需要拦截的请求
// .excludePathPatterns("/login");//不需要拦截的请求
}
}
拦截路径的配置
- /*: 拦截所有一级路径,如:/login 或 /user …
- /**: 拦截任意路径,如:/login 或 /user/1 或 /deletes/user/1
- /user/*: 拦截/user的任意一级路径 如:/user/login,不可以拦截二级如:/user/deletes/2
- /user/**: 拦截/user下的任意路径