我正在使用 graphql-java-kickstart/graphql-spring-boot,我想创建一个拦截器以在处理请求后添加 HTTP header 。
当我向后端发送 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");
}
}
最佳答案
我有以下在我的项目中成功运行的拦截器:
- 我的网络配置:
@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 {
// ...
}
}
关于java - 拦截器在 Spring Boot GraphQL 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69101004/