gpt4 book ai didi

Spring 拦截器在 Spring Data REST URL 中不起作用

转载 作者:行者123 更新时间:2023-12-03 16:55:02 25 4
gpt4 key购买 nike

我正在使用 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 URLs 调用我的拦截器?我该怎么做才能使我的拦截器适用于所有请求?

提前非常感谢。

最佳答案

通过声明一个 MappedInterceptor 类型的 bean 并使用我的拦截器注入(inject)它 - 它扩展了 HandlerInterceptorAdapter,我的拦截器被 Spring Data Rest 拾取,现在适用于应用程序上的任何 URL。

这转化为以下实现(替换我原来问题中的那个):

@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {

@Autowired
DBEditorTenantInterceptor dbEditorTenantInterceptor;

@Bean
public MappedInterceptor dbEditorTenantInterceptor() {
return new MappedInterceptor(new String[]{"/**"}, dbEditorTenantInterceptor);
}

}

不幸的是,我在 Spring 文档中找不到对此的任何引用。

关于Spring 拦截器在 Spring Data REST URL 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46953039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com