gpt4 book ai didi

java - 配置 Jersey 时,Spring Boot HandlerInterceptor 没有触发?

转载 作者:行者123 更新时间:2023-11-30 10:27:38 30 4
gpt4 key购买 nike

我有一个配置了 Jersey 的 Spring Boot v1.4.0 应用程序,用于交付 RESTful 服务。

我有一个可用的应用程序,但我现在正尝试通过 Multi-Tenancy SCHEMA 感知策略来增强它。我希望使用 Spring 的 HandlerInterceptor 框架基于客户端身份验证 header 设置 TenantContext ...

但是,使用 Jersey 发射拦截器似乎存在问题。我可以很好地访问 API(即 curl -i -H "Accept: application/json"-X GET http://localhost:8080/api/products ),但拦截器不会触发。如果我在没有 Jersey 的情况下连接一个更基本的应用程序来进行资源管理,它们会正常运行吗?

这是当前的应用程序设置:

@SpringBootApplication
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).run(args);
}
}

注册拦截器

@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {

@Autowired
HandlerInterceptor tenantInterceptor;

@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(tenantInterceptor);
}
}

拦截器本身

@Component
public class TenantInterceptor extends HandlerInterceptorAdapter {

@Override
public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object handler) throws Exception {
// FIXME: Put in a Logger impl
System.out.println("++++++++++++=======+++++++++ TenantInterceptor.preHandle() Checking for Tenant Routing");

return true;
}

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
TenantContext.clear();
// FIXME: Put in a Logger impl
System.out.println("++++++++++++=======+++++++++ TenantInterceptor.postHandle() Reset Tenant to " + TenantContext.getCurrentTenant());
}
}

JerseyConfig

@Component
@ApplicationPath("api")
public class JerseyConfig extends ResourceConfig {

@PostConstruct
private void init() {
registerClasses(TenantsResource.class);
registerClasses(UsersResource.class);
registerClasses(ProductsResource.class);
}

}

我尝试使用 JerseyConfig @ApplicationPath("api") 和 WebMvcConfig registry.addInterceptor(tenantInterceptor).addPathPatterns("patterns");。一个接一个地尝试了以下,但没有喜悦。

registry.addInterceptor(tenantInterceptor).addPathPatterns("/*");

registry.addInterceptor(tenantInterceptor).addPathPatterns("/**");

registry.addInterceptor(tenantInterceptor).addPathPatterns("/api/**");

registry.addInterceptor(tenantInterceptor).addPathPatterns("/api/*");

registry.addInterceptor(tenantInterceptor).addPathPatterns("/api/products");

registry.addInterceptor(tenantInterceptor).addPathPatterns("/api/products/");

任何帮助 - 非常感谢,否则我将求助于用臭代码破解资源 Controller :(。

谢谢 - Derm

最佳答案

正如 M.Deinum 所提到的,HandlerInterceptor 不适用于 Jersey,它也不是一些“underversal”拦截器。它仅适用于 Spring MVC。对于 Jersey,您可以使用 ContainerRequestFilter .您可以在 ResourceConfig 中注册它。

另请参阅:

关于java - 配置 Jersey 时,Spring Boot HandlerInterceptor 没有触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45235534/

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