Estoy usando Zuul de Spring Cloud para enviar algunas solicitudes de API a algunos servidores externos. El proxy en sí funciona bien, pero cada servicio requiere un token (diferente) proporcionado en el encabezado de la solicitud.
Escribí con éxito un filtro previo simple para cada token que aplica el encabezado apropiado. Sin embargo, ahora tengo un problema. Incluso después de revisar la documentación, no puedo descifrar cómo hacer que cada filtro se aplique solo a la ruta adecuada. No quiero realizar la coincidencia de URL a medida que la URL cambia en los entornos. Idealmente, tendría alguna forma de obtener el nombre de la ruta en el filtro.
Mi aplicación.yml:
zuul: routes: foo: path: /foo/** url: https://fooserver.com bar: path: /bar/** url: https://barserver.comIdealmente, me gustaría hacer algo como esto en FooFilter.java (un prefiltro):
public bool shouldFilter() { return RequestContext.getCurrentContext().getRouteName().equals("foo"); }pero parece que no puedo encontrar ninguna manera de hacer esto.
Puede usar el encabezado de proxy en RequestContext para distinguir el servidor enrutado como se muestra a continuación. Si está usando una cinta, también puede usar el encabezado serviceId . Pero si especifica la URL directamente como arriba de su ejemplo, debe usar el encabezado del proxy . Una cosa que debe saber es que el encabezado del proxy está configurado en PreDecorationFilter , por lo que su filtro previo debe tener un valor de orden de filtro mayor que el valor que tiene PreDecorationFilter (es 5 en este momento).
@Override public int filterOrder() { return 10; } @Override public boolean shouldFilter() { RequestContext ctx = RequestContext.getCurrentContext(); if ((ctx.get("proxy") != null) && ctx.get("proxy").equals("foo")) { return true; } return false; }