是否有一种方法可以用GraphQL实现来设置查询执行的超时?这似乎是GraphQL 文档推荐的一个相当基本的安全问题,但我找不到任何东西。
发布于 2018-11-13 09:38:35
为此,您可以使用GraphQL Java 仪器仪表。
下面的示例为每个数据获取程序设置3秒的超时时间。您可以使用传入的InstrumentationFieldFetchParameters实例将超时应用于特定的数据获取器(如果希望对整个查询进行超时,则可能在查询结构上执行一次超时)。
public class TimeoutInstrumentation extends SimpleInstrumentation {
@Override
public DataFetcher<?> instrumentDataFetcher(
DataFetcher<?> dataFetcher, InstrumentationFieldFetchParameters parameters
) {
return environment ->
Observable.fromCallable(() -> dataFetcher.get(environment))
.subscribeOn(Schedulers.computation())
.timeout(3, TimeUnit.SECONDS)
.blockingFirst();
}
}您还可以使用两个现有工具来实现在您发布的页面中提到的其他检查:
还有在请求级别设置超时的选项。不过,这不属于GraphQL的管辖范围。如果使用Spring作为http服务器,则可以使用spring.mvc.async.request-timeout应用程序属性设置全局请求超时。我很肯定其他的web服务器也会有类似的属性。
https://stackoverflow.com/questions/53055345
复制相似问题