首页 > 解决方案 > 如何为 GraphQL 请求定义 HTTP 过滤器?

问题描述

我使用Quarkus 1.6.1.Final版本和使用SmallRye GraphQL的 GraphQL 实现。我的目标是定义逻辑来检查对端点的每个请求(查询+突变)的用户权限。/graphql所以,我试图找到类似 jax-rs 的东西,ContainerRequestFilter但对于 GraphQL。你有什么想法吗?我试图定义ContainerRequestFilter,但它只捕获 RestEasy 请求而不是 GraphQL 请求。

标签: quarkusmicroprofilesmallrye

解决方案


我自己正在研究这个。似乎 GraphQL 直接注册了 Vert.X 路由调用 [ 1 ],而不是使用 Undertow(servlets) 或 RestEASY(jaxrs)。这样它就可以更轻松地完成部分结果之类的事情。

您将要查看使用 RouteFilter 注释拦截 Vert.X 请求。我已经包含了下面的链接,但它的工作原理很像来自 jax-rs 的 ContainerRequestFilter。我从 Quarkus 帮助指南 [ 2 ] 中复制了示例代码,以提供一个快速示例:

package org.acme.reactive.routes;

import io.vertx.ext.web.RoutingContext;

public class MyFilters {

    @RouteFilter(100) 
    void myFilter(RoutingContext rc) {
       // Put your logic here

       // continue the filtering of the request
       rc.next(); 
    }
}

1:https ://github.com/quarkusio/quarkus/blob/master/extensions/smallrye-graphql/runtime/src/main/java/io/quarkus/smallrye/graphql/runtime/SmallRyeGraphQLRecorder.java

2:https ://quarkus.io/guides/reactive-routes#intercepting-http-requests


推荐阅读