GraphQL-java 查询超时
GraphQL-java query timeout
是否可以通过 GraphQL-java 实现设置查询执行超时?这似乎是 GraphQL docs 推荐的相当基本的安全措施,但我找不到任何东西。
您可以为此使用 GraphQL Java instrumentation。
下面的示例为每个数据提取器设置了 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();
}
}
您还可以使用 2 个现有工具来实现您发布的页面中提到的其他检查:
还有在请求级别设置超时的选项。不过,这不在 GraphQL Java 的管辖范围内。如果您使用 Spring 作为 http 服务器,您可以使用 spring.mvc.async.request-timeout
应用程序 属性 设置全局请求超时。我很确定任何其他网络服务器也会有类似的 属性。
是否可以通过 GraphQL-java 实现设置查询执行超时?这似乎是 GraphQL docs 推荐的相当基本的安全措施,但我找不到任何东西。
您可以为此使用 GraphQL Java instrumentation。
下面的示例为每个数据提取器设置了 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();
}
}
您还可以使用 2 个现有工具来实现您发布的页面中提到的其他检查:
还有在请求级别设置超时的选项。不过,这不在 GraphQL Java 的管辖范围内。如果您使用 Spring 作为 http 服务器,您可以使用 spring.mvc.async.request-timeout
应用程序 属性 设置全局请求超时。我很确定任何其他网络服务器也会有类似的 属性。