как отключить самоанализ схемы в 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();
}