繁体   English   中英

Zuul 路由优先级高于 Spring Controllers

[英]Zuul routes priority higher than Spring Controllers

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

@GetMapping("/test")

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

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

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

 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

我没有测试过上面的例子,但我使用了一个类似的解决方案,它工作正常。

您可以使用 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;
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM