Как определить HTTP-фильтр для запросов GraphQL?

Я использую Quarkus 1.6.1.Final с реализацией GraphQL с использованием SmallRye GraphQL. Моя цель - определить логику для проверки разрешений пользователей на каждый запрос (запрос + мутация), сделанный на/graphqlконечная точка. Итак, я пытаюсь найти что-то вроде jax-rsContainerRequestFilterно для GraphQL. У вас есть идеи, как это сделать? Я пытался определитьContainerRequestFilter но он перехватывает только запросы RestEasy, но не GraphQL.

0 ответов

Я сам разбирался в этом. Похоже, что GraphQL напрямую регистрирует вызов маршрутизации Vert.X [1], а не использует Undertow(сервлеты) или RestEASY(jaxrs). Это сделано для того, чтобы ему было легче делать такие вещи, как частичные результаты, насколько я могу судить.

Вы захотите посмотреть на перехват запросов Vert.X с помощью аннотации RouteFilter. Я добавил ссылку ниже, но она очень похожа на ContainerRequestFilter из jax-rs. Я скопировал образец кода из справочного руководства 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

Другие вопросы по тегам