Java 如何在@PreMatching filter中更改ContainerRequestContext中的路径参数?
我想更改ContainerRequestFilter中的路径参数Java 如何在@PreMatching filter中更改ContainerRequestContext中的路径参数?,java,spring,jersey,jax-rs,Java,Spring,Jersey,Jax Rs,我想更改ContainerRequestFilter中的路径参数 @Provider @PreMatching public class XssFilter implements ContainerRequestFilter { @Override public void filter( ContainerRequestContext request ) throws IOException { cleanPathPara
@Provider
@PreMatching
public class XssFilter implements ContainerRequestFilter {
@Override
public void filter( ContainerRequestContext request ) throws IOException {
cleanPathParams(request);
}
private void cleanPathParams( ContainerRequestContext request )
{
UriBuilder builder = request.getUriInfo().getRequestUriBuilder();
MultivaluedMap<String, String> queries = request.getUriInfo().getPathParameters();
cleanParams(builder, queries); //empty if there is a @PreMatching annotation
request.setRequestUri( builder.build() ); // Method could be called only in pre-matching request filter.
}
}
@Provider
@预匹配
公共类XssFilter实现ContainerRequestFilter{
@凌驾
公共无效筛选器(ContainerRequestContext请求)引发IOException{
cleanPathParams(请求);
}
私有void cleanPathParams(ContainerRequestContext请求)
{
UriBuilder=request.getUriInfo().getRequestUriBuilder();
多值映射查询=request.getUriInfo().getPathParameters();
cleanParams(builder,querys);//如果存在@PreMatching注释,则为空
request.setRequestUri(builder.build());//方法只能在预匹配请求筛选器中调用。
}
}
使用@prematch:
有没有办法替换@prematch filter中的URI参数?我通过更改业务逻辑(用xss拒绝请求,而不是从xss负载中转义参数)解决了这个特殊问题 替换路径和查询参数的解决方案是将Aspcects配置为在调用API方法之后但在执行API主体之前调用(想象为API中的第一行)
如果它不知道资源,那么它就不可能知道路径参数。这就是预匹配过滤器的工作原理。
private void api(@PathParam("name") String name) {
//configure aspects to run here (1st line) - at this point we got parameters and can write them
//body of endpoint
return;
}