Springboot项目里的拦截器
前后端分离项目中的拦截器HandlerInterceptor
- 创建一个自定义拦截器,实现HandlerInterceptor接口 或者继承HandlerInterceptorAdapter
- 重写preHandle和postHandle方法,并在方法中写拦截的逻辑
- 如有多个拦截器,写个配置类,实现WebMvcConfigurer,重写addInterceptors方法,把自定义的拦截器放进去,还可以指定每个拦截器的顺序什么的,这样就做好了自定义的一批拦截器(见第二部分代码)
- 假设有一些请求的白名单路径,需要在项目启动的时候就加载,可以让拦截器同时实现InitializingBean接口,重写afterPropertiesSet方法即可
public class WebInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
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);
}
}
@Configuration
public class WebInterceptorConfig implements WebMvcConfigurer {
@Autowired
private WebSessionInterceptor webSessionInterceptor;
@Autowired
private WebPreCheckInterceptor webPreCheckInterceptor;
@Autowired
private WebOfflineInterceptor webOfflineInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(webSessionInterceptor).order(0).addPathPatterns("/**");
registry.addInterceptor(webPreCheckInterceptor).order(1).addPathPatterns("/**");
registry.addInterceptor(webOfflineInterceptor).order(2).addPathPatterns("/**");
WebMvcConfigurer.super.addInterceptors(registry);
}
}