Я не использовал префикс strip в application.properties, но вместо этого следовал подходу, описанному здесь https://github.com/spring-cloud/spring-cloud-netflix/issues/1893
Специально для моего случая, когда у меня есть веб-интерфейс, который должен маршрутизироваться в разных средах (каждая из которых представляет собой микросервис), у меня есть другой фильтр Zuul, который работает в порядке 6 (PRE_DECORATION_FILTER_ORDER + 1):
@Component
public class PostDecorFilter extends ZuulFilter {
@Value("${zuul.PostSendResponseCustomFilter.post.disable:false}")
private boolean isDisableFilter;
@Override
public int filterOrder() {
// run this filter after zuul..PreDecorationFilter
return PRE_DECORATION_FILTER_ORDER + 1;
}
@Override
public String filterType() {
return PRE_TYPE;
}
@Override
public boolean shouldFilter() {
return !isDisableFilter;
}
/**
* Add custom response processing here
*
* @return
*/
@Override
public Object run() {
RequestContext context = RequestContext.getCurrentContext();
// environment is added by frontend Angular app, e.g. dev, dev-t, qa, qa-t
String environment = RequestContext.getCurrentContext().getRequest().getRequestURI().split("/")[1];
if ( "dev".equals(environment) || "dev-t".equals(environment) || "qa".equals(environment) || "qa-t".equals(environment) ) {
// e.g. /dev/some/resource/
String requestUriWithEnvironment = RequestContext.getCurrentContext().getRequest().getRequestURI();
// e.g. /some/resource/
String requestUriWithoutEnvironment =
requestUriWithEnvironment.substring(environment.length() + 1);
context.put(REQUEST_URI_KEY, requestUriWithoutEnvironment);
}
return null;
}
Мне также пришлось использовать CustomRouteLocator, как указано здесь: https://github.com/spring-cloud/spring-cloud-netflix/issues/2408
Причина в том, что пути в application.properties
ice.ws.local.url=http://localhost:9090/icews/admin
ice.ws.dev.url=http://developmentserver/icews/admin
zuul.routes.base-templates.path=/local/**/base-templates/**
zuul.routes.base-templates.url=${ice.ws.local.url}
zuul.routes.base-templates.path=/dev/**/base-templates/**
zuul.routes.base-templates.url=${ice.ws.dev.url}
По сути, я испытывал такое же поведение, как описано здесь: «похоже, что SimpleRouteLocator выполняет итерации по всем маршрутам, а не в порядке, в котором они находятся в конфигурационном файле, и просто выбирает первое совпадение» https://github.com/spring-cloud/spring-cloud-netflix/issues/2408