Spring-Boot GraphqlServlet绕过Handlerinterceptor机制

时间:2018-06-11 20:17:10

标签: java spring-boot graphql

所以,这是我的设置:

我有一个Spring-Boot-Application-Skelleton,它使用Json-Web-Tokens(JWT)进行身份验证。所有的JWT东西都是在HandlerInterceptor中完成的。

所以我决定整合Graphql。对于graphql,存在一个spring-boot-starter,它基本上公开了一个处理Query的POST-Endpoint。

GraphQL功能就像一个魅力,但它以某种方式绕过了HandlerInterceptor-Chain。我的拦截器没有被调用,除非我稍后会回来的特殊情况。

到目前为止我尝试了什么(没有成功):

  1. 使用/graphql

  2. 明确地使用addPathPatterns添加InterceptorRegistry端点
  3. 为graphql-endpoint添加专用拦截器,将其从当前拦截器中排除

  4. 什么有效

    使用ServletFilter的工作是什么,虽然上面提到了一点点怪癖:在身份验证失败的情况下,我使用response.sendError向客户端发回错误(在过滤器中,响应从ServletResponse转换为HttpServletResponse)。

    回到那个特例

    奇怪的是:在这种情况下,只有在我返回错误的特定情况下,spring才会激活注册的拦截器方法。显然,这个调用现在已经被使用了,因为响应已经回到了客户端。

    出现的问题

    1. 我的假设是假的,一般来说HandlerInterceptors不会处理GraphQL-Endpoint吗?
    2. 有没有人知道为什么servlet过滤器中的错误响应会导致调用HandlerInterceptor?
    3. 感谢您的帮助。 托马斯

0 个答案:

没有答案