2017-05-24 23 views
6

Chcę skonfigurować mój sprzęgacz sprężynowy w taki sposób, aby przy każdym żądaniu był wywoływany.Jak skonfigurować przechwytywacz sprężynowy, aby wywołać go przy każdym żądaniu?

  • Używam przechwytywania w API-GATEWAY (wiosna-Boot)
  • Od API-GATEWAY Wołam inne microservices.
  • Wezwanie do innych mikroserwisów z API-GATEWAY działa dobrze.
  • Inne usługi, które nazywam usługą Node.js, z drugiej strony moja bramka API jest w trakcie rozruchu.
  • Wszystkie usługi (Node.js + Spring-Boot) działają na Docker Container.

Mam do czynienia z problemem w Interceptorze. Chcę skonfigurować go w taki sposób, aby przy każdym żądaniu był on nazywany preHandle() i wykonywać operacje, które w nim napisałem.

Mam jedno zastrzeżenie, o którym chciałbym tutaj wspomnieć.

Jeśli usługi, do których dzwonię są zatrzymane (nie działa), Interceptor działa poprawnie i daje mi odpowiedź, jak nie znaleziono usługi Somename. Jeśli te same usługi są uruchomione w tym czasie, Interceptor nie jest wykonywany.

Tu jest mój urywek kodu

@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("/**"); 


    } 

Interceptor

@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

co robi TokenValidateInterceptor wyglądać? – aksss

+0

Zaktualizowałem moje pytanie i wprowadziłem kod TokenValidateInterceptor. –

Odpowiedz

0

Trzeba dodać przechwytywania do dyspozytora pliku 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> 

Istnieje kilka fajnych próbki tutaj :

+0

Używam Spring-Boot. Tak więc nie ma wymaganego 'dyspozytora-serwletu '. –

+0

Czy możesz udostępnić pełny kod przechwytywacza? Byłoby miło sprawdzić, jak wywołuje usługę ... –

+0

Interceptor nie wywołuje innych usług js węzła. Jego wywołanie get przy użyciu konfiguracji tras Zuell w bootstrap.yml. Jestem pewien, że nie ma problemu z wezwaniem serwisowym. Problem polega na przechwytywaniu żądania w klasie klasy ablove –