无法从代理请求中读取Matrix参数

时间:2017-04-14 19:24:47

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

我将以下请求发送到我的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中),我无法阅读Matrix Params。

我遇到这个问题的原因:

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

我配置Zuul不添加代理头,然后矩阵参数工作。但我想找到我是否可以尝试以任何其他方式修复它,因为我不确定如果我删除代理标题可能会遇到什么问题。

问题是:如何在代理请求中处理Matrix参数?

我尝试使用Matrix Variables而不是PathSegment,但它也没有用。

1 个答案:

答案 0 :(得分:1)

Spring ForwardedHeaderFilter通过使用UrlPathHelper来剥离分号。您可以通过将UrlPathHelper.removeSemicolonContent设置为false来解决此问题。

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