如何拦截从Spring Interceptor到Node Service的请求

2020年12月1日 65点热度 0条评论

这是我正在尝试做的事情:

  • 我有API-GATEWAY(在 spring-boot 中),我想在其中使用拦截器来验证请求。如果请求具有正确的凭据,它将调用其他服务(在 Node.js中)
  • API-GATEWAY正在8765上运行。我仅使用此8765调用其他服务
  • 有4个Node.js服务,我希望每个服务调用都需要在API-GATEWAY的拦截器中进行身份验证,这是我使用registry.addInterceptor(tokenValidateInterceptor()).addPathPatterns("/**");
  • 的原因

  • spring-boot和node.js服务都托管在docker容器中。
  • 我正在使用API​​-GATEWAY中的 zuul路由来调用其他node.js服务。
  • 因为可以通过API-GATEWAY访问其他服务,所以用于调用其他服务的所有配置都可以正常工作。
  • 对我而言,showstopper是API-GATEWAY中的拦截器。我在这里观察到一种奇怪的情况,我想提及

    如果Node.js服务已停止,拦截器可以正常工作,但是如果Node.js服务正在运行,它甚至没有执行Interceptor ,但是该调用正在通过API-GATEWAY进行,并且我从Node得到了必需的响应。 js服务。

    这是我的代码段:

    @EnableEurekaClient
    @SpringBootApplication
    @EnableZuulProxy
    @Configuration
    public class Application extends WebMvcConfigurerAdapter {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    
        @Autowired
        private TokenValidateInterceptor tokenValidateInterceptor;
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
    
            registry.addInterceptor(tokenValidateInterceptor).addPathPatterns("/**");
    
    
        }
    

    拦截器

    @Component
    public class TokenValidateInterceptor extends HandlerInterceptorAdapter {
    
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
            LOG.info("#### Starting TokenValidateInterceptor.preHandle ####");
    
            String apiKey = null;
            try {
                apiKey = request.getHeader("apikey");
    
                LOG.info("The request come with apikey ======" + apiKey);
    
                LOG.info("Actual apikey ======" + azureApikey);
    
    
    }
    

    建议更改或告诉我是否实现了错误的操作。

    解决方案如下:

    请尝试以下配置。它应该工作。

    @Configuration
    public class MyConfiguration extends WebMvcConfigurerAdapter{
        @Override
        public void addInterceptors(InterceptorRegistry registry){
            registry.addInterceptor(new MyCustomInterceptor()).addPathPatterns("/**");
        }
    }