HandlerInterceptorAdapter和Zuul Filter

时间:2016-09-30 23:06:22

标签: java spring spring-mvc spring-boot netflix-zuul

可以使用 Zuul 配置添加HandlerInterceptorAdapter。我需要拦截对特定资源的请求,但我想因为我有 Zuul 过滤器配置,所以拦截器永远不会被调用。

可以吗?

1 个答案:

答案 0 :(得分:8)

我试图实现同样的目标。我们有一些Spring MVC控制器和Zuul代理。但我仍然希望使用相同的拦截器。

这里的问题是zuul在自己的ZuulServlet中运行,并且不会从你的MVC servlet中获取拦截器。 Spring Cloud: ZuulConfiguration.java配置ZuulHandlerMapping,这是唯一可以设置拦截器的地方,但它不可配置。因此,您需要InstantiationAwareBeanPostProcessorAdapter来干扰bean的创建,在实例化之后但在初始化之前(在拦截器初始化之前)设置拦截器。

这对我有用:

@Configuration
@RequiredArgsConstructor
public class ZuulHandlerBeanPostProcessor extends InstantiationAwareBeanPostProcessorAdapter {

    @NonNull
    private final MyInterceptor myInterceptor;

    @Override
    public boolean postProcessAfterInstantiation(final Object bean, final String beanName) throws BeansException {

        if (bean instanceof ZuulHandlerMapping) {

            val zuulHandlerMapping = (ZuulHandlerMapping) bean;
            zuulHandlerMapping.setInterceptors(myInterceptor);
        }

        return super.postProcessAfterInstantiation(bean, beanName);
    }

}