Zuul路由的优先级高于Spring Controllers

时间:2018-10-11 15:47:06

标签: java spring spring-cloud netflix-zuul api-gateway

我的api网关服务中有控制器:

@GetMapping("/test")

我的一条路线中有相同的端点。

当我调用/ test时,我的请求被路由了,我该如何增加Spring Controller的优先级而不是zuul路由?

2 个答案:

答案 0 :(得分:0)

您可以使用路径前面的前进向控制器添加路由,例如:

 zuul:
  routes:
    controller:
      path: /test
      url: forward:/test
    other:
      ...

并将其放在其他路由定义之前,如果使用YAML文件,它将保留订单。

http://cloud.spring.io/spring-cloud-netflix/single/spring-cloud-netflix.html#_strangulation_patterns_and_local_forwards

我还没有测试上面的示例,但是我使用了类似的解决方案,并且效果很好。

答案 1 :(得分:0)

您可以使用 BeanPostProcessor 来减少 ZuulHandlerMapping 的顺序。默认为 -200

@Configuration
public class MvcConfig extends WebMvcConfigurerAdapter {

    @Bean
    public ZuulBeanPostProcessor postBean() {
        return new ZuulBeanPostProcessor();
    }

 
    public static class ZuulBeanPostProcessor implements BeanPostProcessor {

        @Override
        public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
            return bean;
        }

        @Override
        public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
            if (bean instanceof ZuulHandlerMapping) {
                ((ZuulHandlerMapping) bean).setOrder(10);
            }
            return bean;
        }
    }
}