所以,这是我的设置:
我有一个Spring-Boot-Application-Skelleton,它使用Json-Web-Tokens(JWT)进行身份验证。所有的JWT东西都是在HandlerInterceptor中完成的。
所以我决定整合Graphql。对于graphql,存在一个spring-boot-starter,它基本上公开了一个处理Query的POST-Endpoint。
GraphQL功能就像一个魅力,但它以某种方式绕过了HandlerInterceptor-Chain。我的拦截器没有被调用,除非我稍后会回来的特殊情况。
使用/graphql
addPathPatterns
添加InterceptorRegistry
端点
为graphql-endpoint添加专用拦截器,将其从当前拦截器中排除
使用ServletFilter
的工作是什么,虽然上面提到了一点点怪癖:在身份验证失败的情况下,我使用response.sendError
向客户端发回错误(在过滤器中,响应从ServletResponse
转换为HttpServletResponse
)。
奇怪的是:在这种情况下,只有在我返回错误的特定情况下,spring才会激活注册的拦截器方法。显然,这个调用现在已经被使用了,因为响应已经回到了客户端。
感谢您的帮助。 托马斯