Spring Boot集成graphql-java-tools时如何禁用GET端点的GraphQL自省查询
问题解决说明
你使用的 5.4.1 版本的 graphql-java-kickstart 套件,没有单独针对GET端点的自省查询禁用配置属性,可通过以下几种方式实现需求:
方案1:升级依赖版本(最适配)
5.4.x 版本存在已知缺陷:graphql.tools.introspection-enabled=false 配置仅对POST请求生效,未覆盖GET请求解析逻辑。将整套 graphql-java-kickstart 依赖升级到 6.0.0 及以上版本后,该配置即可全局生效,自动拦截所有GET、POST请求中的自省查询,不需要额外修改其他配置。
方案2:直接关闭GraphQL GET端点(无代码改造成本)
如果你的业务场景不需要通过GET方式调用GraphQL接口,可以直接通过原生配置关闭整个GET端点,5.4.1 版本已支持该配置:
# application.properties 中添加 graphql.servlet.get-enabled=false
配置生效后,所有发往GraphQL端点的GET请求会直接返回405 Method Not Allowed错误,从根源上杜绝通过GET参数携带自省查询的可能。
方案3:保留GET端点的实现方式
如果需要保留GET端点且无法升级版本,除了你已经验证可用的Spring过滤器方案外,还可以通过GraphQL生态原生拦截器实现:
- 实现
GraphQLQueryInvocationHandler接口 - 重写调用逻辑,校验查询语句是否包含
__schema、__type等自省关键字,若匹配则直接返回拒绝响应 - 将自定义拦截器注册为Spring Bean,即可自动生效
内容的提问来源于stack exchange,提问作者Jalaj Chawla
相关产品推荐
相关产品推荐

