如何拦截从Spring Interceptor到Node Service

时间:2017-05-25 14:54:36

标签: java node.js spring docker spring-boot

以下是我要做的事情:

  • 我有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服务正在运行它甚至没有执行拦截器,但调用是通过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);


}

建议更改或告诉我如果我实施了错误。

1 个答案:

答案 0 :(得分:0)

尝试以下配置。应该可以。

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