我现在有了一个解决方案。
@PreMatching
. 这会导致在请求中更早地执行提供程序,因此您可以在处理路径之前对其进行操作。缺点是我无法使用
PathParameters
因为占位符
{userId}
此时未设置。相反,我必须以某种方式从路径中逐段提取信息:
List<PathSegment> pathSegments = requestContext.getUriInfo().getPathSegments();
不幸的是,我从新路径重建了整个路径(包括查询参数!)更改用户ID。
String fullPath = requestContext.getUriInfo().getPath();
MultivaluedMap<String, String> queryParameters = requestContext.getUriInfo().getQueryParameters(true);
String modifiedPath = fullPath.replaceFirst(obfuscationId, userId);
UriBuilder uriBuilder = UriBuilder.fromPath(modifiedPath);
queryParameters.forEach((k,v) -> { uriBuilder.queryParam(k, v.get(0)); } );
requestContext.setRequestUri(uriBuilder.build());