在 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();
我已经在基于 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();