Zuul路径从根路径
我有一些与Eureka一起发现的微服务。 他们大多提供一些API。 我实际上有Zuul Proxy的“边缘”服务叫做“网关服务”。 问题是有一个Web应用程序。 它由网关服务主持了很长时间,并没有任何问题。 但现在我需要在网关后面的单独服务中托管此客户端。 这不是一个问题。 我创建了新的服务并将Web应用程序放在那里。 但事情是Zuul在网关服务上有下一个配置
zuul:
ignoredServices: '*'
prefix: /api
sensitiveHeaders: Cookie, Set-Cookie
routes:
config-service:
path: /conf/**
serviceId: config-service
security-service:
path: /security/**
serviceId: security-service
stripPrefix: false
request-service:
path: /requests/**
stripPrefix: false
我需要这样做,以便用户可以像这样的http://app.com/
从根路径访问Web应用程序。 但现在我只能通过http://app.com/api/
访问它,这完全不正确。
我的任务是:
/api
前缀仍然非常重要。 我试图实现ZuulFilter
。 但看起来它对根路径没有任何作用,只有在与上述任何路由匹配时才会运行。
我该如何做这项工作?
更新 :我用ZuulFilter
取得了一点成功。 我做到了。 这是Zuul的配置:
zuul:
ignoredServices: '*'
sensitiveHeaders: Cookie, Set-Cookie
routes:
api: /api/**
config-service:
path: /conf/**
serviceId: config-service
security-service:
path: /security/**
serviceId: security-service
stripPrefix: false
request-service:
path: /requests/**
stripPrefix: false
frontend-host-service:
path: /**
和ZuulFilter
本身
@Bean
public ZuulFilter apiPrefixStrip(RouteLocator routeLocator) {
return new ZuulFilter() {
@Override
public String filterType() {
return "pre";
}
@Override
public int filterOrder() {
return 0;
}
@Override
public boolean shouldFilter() {
RequestContext context = RequestContext.getCurrentContext();
return context.getRequest().getRequestURI().startsWith("/api");
}
@Override
public Object run() {
RequestContext context = RequestContext.getCurrentContext();
String path = context.getRequest().getRequestURI();
Route route = routeLocator.getMatchingRoute(path.substring(4));
if (route != null) {
context.put("proxy",route.getId());
context.put("requestURI", route.getPath());
context.set("serviceId", route.getLocation());
}
return null;
}
};
}
这是如何工作的:有属性zuul.routes.api=/api/**
,它实际上没有做任何事情。 它只允许将所有匹配的路径映射到Zuul过滤器链(在文档中描述)。 这里描述的所有其他路由都是根据没有/api
设置的。 它允许达到这样的服务: http://app.com/requests
: http://app.com/requests
例如对于请求服务。 ZuulFilter
执行对属性中描述的每个请求的检查,但只有在请求的URI以/api
开头并且它以与路径中没有任何/api
相同的方式重定向该请求时才会运行。
它真的有效。 但我仍然不喜欢这个解决方案,因为没有/api
前缀的端点仍然保留在网关服务上。 可能有人知道如何改进它?
我会做以下事情:
zuul.prefix
属性。 to all of your
zuul.routes。*。path`属性前面加上'api的前缀。 app:
path: /**
stripPrefix: false
(3)非常重要,因为这里的路线顺序很重要。 这是传入请求将评估路由是否匹配的顺序。 在yaml中执行此操作也很重要,因为订单将保留下来,可能不包含属性文件(根据文档)。
链接地址: http://www.djcxy.com/p/38157.html