2017-05-24 54 views
6

我想配置我的彈簧攔截器,使得每個請求都應該被調用。如何配置彈簧攔截器以便在每個請求中調用

  • 我使用攔截器在API網關(彈簧引導)
  • 從API網關我呼籲其他微服務。
  • 來自API-GATEWAY的其他微服務的調用工作正常。
  • 其他服務,我打電話是Node.js服務,另一方面,我的API網關是在春季啓動。
  • 所有服務(Node.js + Spring-Boot)都在Docker Container上運行。

我在Interceptor中遇到了一個問題。我想以這樣的方式對它進行配置,使得每次請求都應該被稱爲preHandle(),並執行我寫入的操作。

我注意到一個我想在這裏提到的問題。

如果我正在調用的服務已停止(不運行),Interceptor正常工作並給我一個未找到的somename-service響應。 如果相同的服務正在運行,此時Interceptor不會執行。

這裏是我的代碼片段

@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); 


} 
+0

那麼你的TokenValidateInterceptor樣子? – aksss

+0

我已更新我的問題,並把TokenValidateInterceptor代碼。 –

回答

0

你有這個攔截器添加到您的調度員XML文件:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd"> 


    <bean id="handlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" p:interceptors-ref="tokenInterceptor" /> 

    <bean id="tokenInterceptor" class="yourpackage.TokenValidateInterceptor" /> 

</beans> 

有幾個不錯的樣本在這裏:

+0

我正在使用Spring-Boot。所以不需要'dispatcher-servlet'。 –

+0

你能分享你的攔截器的完整代碼嗎?我會很高興檢查它是如何調用服務的... –

+0

攔截器不調用其他節點的js服務。使用Zuell路由的get調用在bootstrap.yml中配置。我相信沒有問題的是服務電話。問題在於攔截在提及類中的請求 –