Xce*_*led 7 java spring spring-cloud netflix-zuul spring-cloud-netflix
我正在使用Spring Cloud的Zuul将一些API请求代理到一些外部服务器.代理本身运行良好,但每个服务都需要请求头中提供的(不同)令牌.
我已成功为每个应用适当标头的令牌编写了一个简单的预过滤器.但是,我现在有一个问题.即使在完成文档后,我也无法弄清楚如何使每个过滤器仅适用于正确的路径.我不想在网址随环境变化时执行网址匹配.理想情况下,我有一些方法可以在过滤器中获取路径的名称.
我的application.yml:
zuul:
routes:
foo:
path: /foo/**
url: https://fooserver.com
bar:
path: /bar/**
url: https://barserver.com
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想在FooFilter.java(预过滤器)中执行类似的操作:
public bool shouldFilter() {
return RequestContext.getCurrentContext().getRouteName().equals("foo");
}
Run Code Online (Sandbox Code Playgroud)
但我似乎无法找到任何方法来做到这一点.
yon*_*oon 17
您可以使用proxy标头来RequestContext区分路由服务器,如下所示.如果您使用功能区,则还可以使用serviceId标题.但是,如果您在示例上方指定了url direclty,则应使用proxy标头.您必须知道的一件事proxy是设置了标头PreDecorationFilter,因此您的预过滤器必须具有比具有的值更大的过滤器顺序值PreDecorationFilter(此时它是5).
@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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5139 次 |
| 最近记录: |