Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在@PreMatching filter中更改ContainerRequestContext中的路径参数?_Java_Spring_Jersey_Jax Rs - Fatal编程技术网

Java 如何在@PreMatching filter中更改ContainerRequestContext中的路径参数?

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

我想更改ContainerRequestFilter中的路径参数

    @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注释,但现在:

  • 我有路径参数的映射,无法保存(后期匹配)

  • 有没有办法替换@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;
    }