为 Spring 启动应用程序启用 Zuul 代理后(我们有一组 miroservices),spring mvc 拦截器不起作用

After enabling Zuul proxy for the Spring boot app (We have set of miroservices), spring mvc interceptor doesnot work

下面是Application.java。它有调用拦截器的代码

@EnableEurekaClient
@SpringBootApplication
@EnableZuulProxy
public class Application extends WebMvcConfigurerAdapter {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Bean
    public TokenValidateInterceptor tokenValidateInterceptor() {
        TokenValidateInterceptor localeChangeInterceptor = new TokenValidateInterceptor();
        System.out.println("In WEB MVC Intereptor, Interceptor returned");
        return localeChangeInterceptor;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        System.out.println("In WEB MVC Intereptor");
        // registry.addInterceptor(tokenValidateInterceptor()).addPathPatterns("/");
        registry.addInterceptor(tokenValidateInterceptor()).addPathPatterns("/api/**");
        // registry.addInterceptor(new
        // TokenValidateInterceptor()).addPathPatterns("/api/**");
    }

}

以下是拦截器代码片段:

@Component
public class TokenValidateInterceptor extends HandlerInterceptorAdapter {

    private static final Logger LOG = Logger.getLogger(TokenValidateInterceptor.class);

    // before the actual handler will be executed ..
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        String apikey = request.getHeader("apikey");
        // if (LOG.isDebugEnabled()) {
        LOG.info("#### Starting TokenValidateInterceptor.preHandle ####");
        LOG.info("apikey-->" + apikey);
        // }
        if (StringUtils.isBlank(apikey) || apikey == null || apikey.isEmpty()) {
                return true;
        }
}
}

但是调用没有到达拦截器的预句柄。

据我所知,Zuul 路由中定义的所有请求都由 ZuulServlet 处理。 Spring MVC 不处理这些请求,因此不会为这些请求调用任何 Spring HandlerInterceptor。如果您需要对 API 请求进行任何预处理,您应该在 Zuul 预过滤器或 servlet 过滤器中实现它。