как отключить самоанализ схемы в graphql-spqr-spring-boot-starter

Я интегрировал свое весеннее загрузочное приложение с graphql-spqr-spring-boot-starter https://github.com/leangen/graphql-spqr-spring-boot-starter, мне нужно найти способ отключить интроспекцию схемы graphql так как это проблема безопасности для производства.

3 ответа

schemaBuilder.fieldVisibility устарел.

Graphql-spqr 0.10

          @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();
    }

Я использую graphql-spqr 0.9.9 и graphql-spqr-spring-boot-starter 0.0.4, но база кода изменилась для graphql-spqr 0.10. Я постараюсь рассмотреть оба случая, но имейте в виду, что вам, возможно, придется немного подправить фрагменты кода.

В стартере Graphql-spqr-spring-boot, GraphQLSchemaGenerator бин, используемый для генерации GraphQSchema. Это определено в io.leangen.graphql.spqr.spring.autoconfigure.BaseAutoConfiguration (v0.10) или io.leangen.graphql.spqr.spring.autoconfigure.SpqrAutoConfiguration (v0.9).

Вам необходимо предоставить собственный bean-компонент GraphQLSchemaGenerator, который будет устанавливать GraphqlFieldVisibility для запроса самоанализа. Согласно этой проблеме (сохранено в кэше google: https://webcache.googleusercontent.com/search?q=cache:8VV29F3ovZsJ:https://github.com/leangen/graphql-spqr/issues/305) есть два разных способы настройки видимости поля:

Graphql-spqr 0.9

@Bean
public GraphQLSchemaGenerator graphQLSchemaGenerator(SpqrProperties spqrProperties) {
  GraphQLSchemaGenerator schemaGenerator = new GraphQLSchemaGenerator();

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

  //Other GraphQLSchemaGenerator configuration
}

Graphql-spqr 0.10

@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.

Кажется, это работает, в классе SpqrAutoConfiguration есть bean-компонент для генерации схемы Graphql из объекта-генератора

@Bean
public GraphQLSchema graphQLSchema(GraphQLSchemaGenerator schemaGenerator) {
schemaGenerator.withSchemaProcessors((schemaBuilder, buildContext) ->
{
 schemaBuilder.fieldVisibility(new NoIntrospectionGraphqlFieldVisibility());
 return schemaBuilder;
});
   return schemaGenerator.generate();
}
Другие вопросы по тегам