拦截器在 Spring Boot GraphQL 中不起作用
Posted
技术标签:
【中文标题】拦截器在 Spring Boot GraphQL 中不起作用【英文标题】:Interceptor not working in Spring Boot GraphQL 【发布时间】:2021-11-05 02:32:08 【问题描述】:我正在使用 graphql-java-kickstart/graphql-spring-boot,我想创建一个拦截器以在处理请求后添加一个 HTTP 标头。
当我向后端发送 graphql 请求时,不会触发拦截器。但是有些调用会触发拦截器。例如,当我在浏览器中打开 /graphiql 时,我看到拦截器被触发,但是当我从 graphiql 客户端发送一个 graphql 请求时,它不是。知道为什么吗?有人有这方面的经验吗?
我的配置如下所示:
@Configuration
public class InterceptorConfig implements WebMvcConfigurer
@Autowired
private TestInterceptor testInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry)
registry.addInterceptor(testInterceptor).addPathPatterns("/**");
也是我的拦截器:
@Slf4j
@Component
public class TestInterceptor extends HandlerInterceptorAdapter
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
throws Exception
// post processing
log.info("hello there");
【问题讨论】:
github.com/graphql-java-kickstart/graphql-spring-boot/issues/… 感谢链接我也发现了这个问题。一位贡献者说“......我会说这些拦截器的正确配置应该可以工作......”但所有的 cmets 都是关于 ServletListeners 和 Filters 的,它们不会为我完成任务。 听起来可能与您的模式中的路径有关。您可以尝试使用相同的路径从客户端发送请求吗? 【参考方案1】:我有以下拦截器在我的项目中成功运行:
-
我的网络配置:
@Configuration
public class WebConfig implements WebMvcConfigurer
@Override
public void addInterceptors(InterceptorRegistry registry)
registry.addInterceptor(requestInterceptor);
@Autowired
private ControllerExecInterceptor requestInterceptor;
其中ControllerExecInterceptor定义为:
@Component
public class ControllerExecInterceptor extends HandlerInterceptorAdapter
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws AccessDeniedException, Exception
// ...
@Override
public boolean postHandle(HttpServletRequest request, HttpServletResponse
response, Object handler) throws
// ...
【讨论】:
是 graphql API 还是 REST? 此配置适用于 REST,但您可以使用 GraphQL 看起来它也适用于 GraphQL。谢谢。以上是关于拦截器在 Spring Boot GraphQL 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Spring boot graphql 在类路径中找不到 graphql 模式文件
GraphQL + Spring Boot:如何收集(错误)指标?
有没有办法使用spring boot starter app graphql-spring-boot-starter公开2个graphql端点?