Я создал клиент SchemaDirective и пытаюсь зарегистрировать его в своем приложении Spring Boot, которое использует
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-spring-boot-starter</artifactId>
<version>5.0.2</version>
</dependency>
и GraphQLQueryResolver
открытый класс AuthorisationDirective реализует SchemaDirectiveWiring {
@Override
public GraphQLFieldDefinition onField(SchemaDirectiveWiringEnvironment<GraphQLFieldDefinition> schemaDirectiveWiringEnv) {
String targetAuthRole = (String) schemaDirectiveWiringEnv.getDirective().getArgument("role").getValue();
GraphQLFieldDefinition field = schemaDirectiveWiringEnv.getElement();
//
// build a data fetcher that first checks authorisation roles before then calling the original data fetcher
//
DataFetcher originalDataFetcher = field.getDataFetcher();
DataFetcher authDataFetcher = new DataFetcher() {
@Override
public Object get(DataFetchingEnvironment dataFetchingEnvironment) throws Exception {
Map<String, Object> contextMap = dataFetchingEnvironment.getContext();
//AuthorisationCtx authContext = (AuthorisationCtx) contextMap.get("authContext");
if ("dev".equals(targetAuthRole)) {
return originalDataFetcher.get(dataFetchingEnvironment);
} else {
return "Un-Authorized";
}
}
};
//
// now change the field definition to have the new authorising data fetcher
return field.transform(builder -> builder.dataFetcher(authDataFetcher));
}
Ниже работает, но так как я использую GraphQLQueryResover, у меня нет созданных DataFetchers
private RuntimeWiring buildRuntimeWiring() {
return RuntimeWiring.newRuntimeWiring().directive("auth", new AuthorisationDirective())
.type("Query", typeWiring -> typeWiring
.dataFetcher("allBooks", allBooksDataFetcher)
.dataFetcher("book", bookDataFetcher))
.build();
}
Пожалуйста, помогите, как зарегистрировать его в Springboot.