在 Quarkus 拦截器中获取请求 body

Get request body in Quarkus Interceptor

我已经在基于 Quarkus 的应用程序中编写了一个拦截器。

@AccessPolicy  //custom annotation
@Interceptor
public class PolicyInterceptor {
  
  @AroundInvoke
  Object authorize(InvocationContext context) throws Exception {

  HttpServerRequest request = ResteasyProviderFactory.getInstance().getContextData(HttpServerRequest.class);
  String tenantId = request.getHeader("tenant-id");
  //business logic here which needs request body
  return context.proceed();
}

有一些用@AccessPolicy 注释的rest API,这个拦截器正确地拦截了它们。 我能够从请求中获得 header 值 (request.getHeader("tenant-id")).

不知何故 body 在 HttpServerRequest object 中不可用。

PS:我不能使用 ContainerRequestFilter,因为我需要 InvocationContext 作为业务逻辑。请建议是否有任何其他方式可以同时给我请求 body 和调用上下文。

使用 ContainerRequestFilter 为我工作,因为我需要 InvocationContext 只是为了获取 Rest API 的方法名称,它在 ContainerRequestContext 中可用。

String methodName = ((PostMatchContainerRequestContext) requestContext).getResourceMethod().getMethod().getName();