Zuul路由优先级高于Spring Controllers



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

@GetMapping("/test")

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

当我调用/test 时,我的请求被路由,如何提高 Spring 控制器相对于 zuul 路由的优先级?

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

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;
}
}
}

最新更新