禁用graphqljava工具中的GraphQLIntrospection



我正试图在我的项目中禁用GraphQLIntrospection,但在我使用的特定框架方面运气不佳。有些文章说它可以在CcodeRegistry模块中完成,但这是一个反编译的只读源代码。有人用GraphQL-java-kickstart框架实现了这一点吗?

以下是我的pom文件中的依赖项:

<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-java</artifactId>
<version>${graphql.java.version}</version>
</dependency>
<dependency>
<groupId>com.graphql-java-kickstart</groupId>
<artifactId>graphql-java-tools</artifactId>
<version>${graphql.java.tools.version}</version>
</dependency>
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-java-extended-validation</artifactId>
<version>0.0.3</version>
</dependency>

Graphql-java

使用graphql-java,您可以使用GraphQLSchema.Builder构建一个GraphQLSchema。在生成以禁用内省查询之前,您需要设置内省字段的生成器可见性。

GraphQLSchema.Builder builder = GraphQLSchema.newSchema()
.query(query)
.mutation(mutation)
.subscription(subscription)
.additionalTypes(dictionary);
builder.fieldVisibility(NoIntrospectionGraphqlFieldVisibility.NO_INTROSPECTION_FIELD_VISIBILITY);
GraphQLSchema = builder.build();

您可以使用graphqljava工具实现作为参考。

Graphql java工具

使用graphql-java工具,可以使用SchemaParserBuilder构建SchemaParser。SchemaParserBuilder需要一个SchemaParserOptions对象。在构建SchemaParserOptions时,可以启用或禁用内省查询。这里是一个非常简化的实现。

SchemaParserBuilder builder = new SchemaParserBuilder();
final SchemaParserOptions.Builder optionsBuilder = newOptions();
optionsBuilder.introspectionEnabled(introspectionEnabled);
return builder.options(optionsBuilder.build()).build();

您可以使用graphqlspring-boot实现作为参考。

Graphql弹簧引导

如果您使用的是graphql-spring-boot,根据graphql-java工具README,您可以通过在application.properties或application.yml文件中将graphql.tools.introspection-enabled属性设置为false来禁用内省查询。

graphql:
tools:
schema-location-pattern: "**/*.graphqls"
# Enable or disable the introspection query. Disabling it puts your server in contravention of the GraphQL
# specification and expectations of most clients, so use this option with caution
introspection-enabled: false  

Graphql spqr

对于Graphql-spqr,其思想与Graphql-java中的相同:设置生成器字段可见性。请参阅我对这个问题的回答,了解如何实现它。

相关内容

  • 没有找到相关文章

最新更新