我将以下请求发送到我的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-host
,x-forwarded-proto
,x-forwarded-prefix
等代理标头添加到请求中。这与包装请求相同。
我配置Zuul不添加代理头,然后矩阵参数工作。但我想找到我是否可以尝试以任何其他方式修复它,因为我不确定如果我删除代理标题可能会遇到什么问题。
问题是:如何在代理请求中处理Matrix参数?
我尝试使用Matrix Variables而不是PathSegment,但它也没有用。
答案 0 :(得分:1)
Spring ForwardedHeaderFilter
通过使用UrlPathHelper
来剥离分号。您可以通过将UrlPathHelper.removeSemicolonContent
设置为false
来解决此问题。
您会注意到ForwardedHeaderFilter.pathHelper
是私有字段,因此您需要使用反射来访问它。