gpt4 book ai didi

java - 如何使用 SPQR 和 Spring 注册 ResolverInterceptors

转载 作者:行者123 更新时间:2023-11-29 04:07:45 26 4
gpt4 key购买 nike

我正在尝试为我的 spring-boot/graphQL/SPQR 项目创建一些身份验证机制。我设法通过 @GraphQLRootContext 注释在单个服务方法上完成它:

@GraphQLMutation(name = "createProblem")
public Problem createProblem(
@GraphQLRootContext DefaultGlobalContext<Object> context,
@GraphQLArgument(name = "problemInput") @Valid Problem problemInput)
{
WebRequest request = (WebRequest) context.getNativeRequest();
String token = request.getHeader("token");
}

在这里我可以提取 JWT token 并验证/验证它。但是,我想在全局级别上执行此操作,而不必将上下文参数添加到我的所有方法中。我正在尝试实现一个 ResolverInterceptor,如 here 所述.

但是,我不知道如何向 spring 应用程序注册这个拦截器,以便正确调用它。谁能帮帮我?

提前致谢,马蒂亚斯

最佳答案

我全心全意地建议您使用现有的 Spring 功能来处理安全性,而不是推出您自己的功能,因为它已经拥有处理 JWT 所需的一切。由于 SPQR 将调用 Spring 管理的 bean,因此所有 Spring 功能都将正常工作。

如果出于某种原因这不是一个选项,是的,ResolverInterceptor 是可行的方法,因为它可以拦截任何解析器调用并检查根上下文。

对于您的情况,如果您想要一个全局适用(适用于所有解析器)的 ResolverInterceptor,您可以使用 GlobalResolverInterceptorFactory:

@Bean
public ExtensionProvider<GeneratorConfiguration, ResolverInterceptorFactory> customInterceptors() {
return (config, interceptors) -> interceptors.append(new GlobalResolverInterceptorFactory(customGlobalInterceptors);
}

如果你想优化一下,只拦截一些解析器,例如基于注释,您可以提供自定义 ResolverInterceptorFactory,例如:

public class AuthInterceptorFactory implements ResolverInterceptorFactory {

List<ResolverInterceptor> authInterceptor = Collections.singletonList(new AuthInterceptor());

@Override
public List<ResolverInterceptor> getInterceptors(ResolverInterceptorFactoryParams params) {
return params.getResolver().getTypedElement().isAnnotationPresent(Auth.class) ? authInterceptor : Collections.emptyList();
}
}

在您的 ResolverInterceptor 中,如果 token 丢失或无效,您需要抛出一个 AbortExecutionException 以防止进一步执行。

关于java - 如何使用 SPQR 和 Spring 注册 ResolverInterceptors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57234905/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com