【问题标题】:Unable to read Matrix Parameters from a proxied request无法从代理请求中读取矩阵参数
【发布时间】:2017-04-14 19:24:46
【问题描述】:

我正在向我的 REST api 发送以下请求: http://localhost:8080/accid234/accounts;email=testme@test.com/departmentUse

Rest-api Java 代码:

@Path("/{accounts}")
public Accounts getDeptAccounts(@PathParam("accounts") PathSegment pathSegment) {

 Map<String, String> matrixParams = pathSegment.getMatrixParameters();

 for (String s: matrixParams.keySet()) {
        System.out.println("***Matrix params Key:" + s + "Value:" + matrixParams.get(s));
    }
}

当请求直接发送到上述端点时,这可以正常工作。

但是当请求被包装(ForwardedHeaderFilter)时,我无法读取矩阵参数。

我遇到这个问题的原因:

我使用 spring-cloud-netflix-zuul 作为代理路由服务,它在请求中添加了诸如 x-forwarded-hostx-forwarded-protox-forwarded-prefix 等代理标头。这与包装请求相同。

我将 Zuul 配置为不添加代理标头,然后 Matrix Parameters 起作用了。但是我想知道是否可以尝试以任何其他方式修复它,因为我不确定如果删除代理标头可能会遇到什么问题。

问题是:如何处理代理请求中的矩阵参数?

我尝试使用矩阵变量而不是 PathSegment,但也没有用。

【问题讨论】:

    标签: rest spring-mvc netflix-zuul spring-cloud-netflix


    【解决方案1】:

    Spring 的ForwardedHeaderFilter 正在通过使用UrlPathHelper 去除分号。您可以通过将UrlPathHelper.removeSemicolonContent 设置为false 来解决此问题。

    您会注意到ForwardedHeaderFilter.pathHelper 是一个私有字段,因此您需要使用反射来访问它。

    【讨论】:

    • 感谢帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多