如何配置 Zuul 网关(监听两个端口)以拒绝基于端口和 url 组合的请求?

How to configure Zuul gateway(which is listening on two ports) to decline requests based on port and url combination?

我有一个用例,需要从另一个 Spring 引导应用程序和浏览器访问我的 Zuul 网关。

Spring 启动应用程序需要使用证书向 Zuul 验证自身。所以我在端口 8762 上启用了双向 ssl,并在端口 8763 上启用了单向 ssl 以供浏览器访问。但问题是现在我可以通过 8763 端口访问每个端点。有没有办法强制通过 8762 访问某些 url?每个包含 "api" 的示例 url 只能通过端口 8762 而不能通过端口 8763 访问。有没有办法制作这样的过滤器?

您可以创建自定义预路由 ZuulFilter 来标识传入请求并决定是否需要进一步路由请求。

从上下文中获取有关传入请求 (HttpServletRequest) 的详细信息。以下是供您参考的示例片段:

@Override
public String filterType() {
    return FilterConstants.PRE_TYPE;
}

@Override
public int filterOrder() {
    return 1;
}

@Override
public boolean shouldFilter() {
    return true;
}

@Override
public Object run() {
    final RequestContext requestContext = RequestContext.getCurrentContext();
    final HttpServletRequest request = requestContext.getRequest();

    request.getRemotePort(); // Assign these to a variable to perform your business logic.
    request.getRequestURI();