我试图达到相同的目的。我们有一些Spring MVC控制器和Zuul代理。但是我仍然希望使用相同的拦截器。
这里的问题是zuul在其自己的ZuulServlet中运行,并且不会从您的MVC Servlet中获取拦截器。Spring
Cloud:ZuulConfiguration.java配置了ZuulHandlerMapping,这是可以设置的唯一位置拦截器,但是它是不可配置的。因此,您需要a
InstantiationAwareBeanPostProcessorAdapter来干扰bean的创建,在实例化之后但在初始化之前(在初始化拦截器之前)设置拦截器。
这对我有用:
@Configuration@RequiredArgsConstructorpublic 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); }}


