【发布时间】:2018-04-07 18:15:07
【问题描述】:
我正在使用 Spring Data Rest 和 JPA 开发一个项目,并且我正在尝试配置 HTTP 拦截器。根据参考文档, 在Spring Web MVC Docs - Handler Mapping Interceptor 中可用,我创建了一个扩展 HandlerInterceptorAdapter 的组件,如下所示:
@Component
public class DBEditorTenantInterceptor extends HandlerInterceptorAdapter {
Logger logger = LoggerFactory.getLogger(DBEditorTenantInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
logger.debug("********** INTERCEPTION SUCCESSFUL **********");
return true;
}
}
然后,通过扩展 WebMvcConfig 注册拦截器(如Spring Web MVC Docs - Config Interceptors中所述
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Autowired
DBEditorTenantInterceptor dbEditorTenantInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(dbEditorTenantInterceptor)
.addPathPatterns("/**");
}
}
当我向 Spring Data REST 未使用的任何 URL(例如 /helloworld)发出 HTTP 请求时,拦截器按预期工作,因为我看到了记录器输出
017-10-26 13:16:24.689 DEBUG 17012 --- [p-nio-80-exec-4] c.c.v.d.DBEditorTenantInterceptor : ********** INTERCEPTION SUCCESSFUL **********
但是,当spring data rest使用URL时,我的拦截器没有被调用。这适用于所有 URL,例如 /api/{existing entity in model}
为什么没有为 Spring Data Rest URL 调用我的拦截器?我该怎么做才能使我的拦截器适用于所有请求?
提前非常感谢。
【问题讨论】:
-
这是这个问题的问题:github.com/spring-projects/spring-data-rest/issues/1522,它仍然是开放的
标签: spring spring-mvc spring-boot spring-data-jpa spring-data-rest