首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何禁用graphql spring-启动程序中的架构内省

如何禁用graphql spring-启动程序中的架构内省
EN

Stack Overflow用户
提问于 2020-10-25 04:31:10
回答 3查看 1.2K关注 0票数 1

我已经将我的spring引导应用程序集成到graphql spring启动器https://github.com/leangen/graphql-spqr-spring-boot-starter中,我需要找到一种方法来禁用graphql模式内省,因为它是生产中的一个安全问题。

EN

回答 3

Stack Overflow用户

发布于 2020-10-27 05:42:55

我使用的是graphql 0.9.9和graphql spring-boot-starter 0.0.4,但是代码库更改为graphql 0.10。我将尝试讨论这两种情况,但请记住,您可能需要稍微修改一下代码片段。

在启动器中,GraphQLSchemaGenerator是一个用来生成GraphQSchema的bean .它在io.leangen.graphql.spqr.spring.autoconfigure.BaseAutoConfiguration (v0.10)或io.leangen.graphql.spqr.spring.autoconfigure.SpqrAutoConfiguration (v0.9)中定义。

您需要提供您自己的GraphQLSchemaGenerator bean,它将为内省查询设置GraphqlFieldVisibility。根据这个问题(由google:https://webcache.googleusercontent.com/search?q=cache:8VV29F3ovZsJ:https://github.com/leangen/graphql-spqr/issues/305缓存),有两种不同的方法来设置字段的可见性:

GraphQL-SPQR0.9

代码语言:javascript
复制
@Bean
public GraphQLSchemaGenerator graphQLSchemaGenerator(SpqrProperties spqrProperties) {
  GraphQLSchemaGenerator schemaGenerator = new GraphQLSchemaGenerator();

  schemaGenerator.withSchemaProcessors((schemaBuilder, buildContext) -> 
  {
      schemaBuilder.fieldVisibility(new NoIntrospectionGraphqlFieldVisibility());
      return schemaBuilder;
  });

  //Other GraphQLSchemaGenerator configuration
}

Graphql 0.10

代码语言:javascript
复制
@Bean
public GraphQLSchemaGenerator graphQLSchemaGenerator(SpqrProperties spqrProperties) {
  GraphQLSchemaGenerator schemaGenerator = new GraphQLSchemaGenerator();

  schemaGenerator.withSchemaProcessors((schemaBuilder, buildContext) -> 
  {
    buildContext.codeRegistry.fieldVisibility(NoIntrospectionGraphqlFieldVisibility.NO_INTROSPECTION_FIELD_VISIBILITY);
    return schemaBuilder;
  });

  //Other GraphQLSchemaGenerator configuration
}

您可以从默认实现中获得灵感,以正确设置GraphQLGenerator。

票数 0
EN

Stack Overflow用户

发布于 2020-11-08 12:04:25

这似乎可行,在SpqrAutoConfiguration类中有一个bean从生成器对象到generateGraphql模式。

代码语言:javascript
复制
@Bean
public GraphQLSchema graphQLSchema(GraphQLSchemaGenerator schemaGenerator) {
schemaGenerator.withSchemaProcessors((schemaBuilder, buildContext) ->
{
 schemaBuilder.fieldVisibility(new NoIntrospectionGraphqlFieldVisibility());
 return schemaBuilder;
});
   return schemaGenerator.generate();
}
票数 0
EN

Stack Overflow用户

发布于 2020-12-15 05:09:02

schemaBuilder.fieldVisibility被否决了。

Graphql 0.10

代码语言:javascript
复制
    @Bean
    public GraphQLSchema graphQLSchema(GraphQLSchemaGenerator schemaGenerator) {
        schemaGenerator.withSchemaProcessors((schemaBuilder, buildContext) -> {
            schemaBuilder.codeRegistry(
                    buildContext
                            .codeRegistry
                            .fieldVisibility(NoIntrospectionGraphqlFieldVisibility.NO_INTROSPECTION_FIELD_VISIBILITY)
                            .build()
            );
            return schemaBuilder;
        });
        return schemaGenerator.generate();
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64520366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档