Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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 如何在RESTEasy 3.0客户端框架(使用ResteasyClientBuilder和ResteasyWebTarget)中设置HTTP头?_Java_Jax Rs_Resteasy - Fatal编程技术网

Java 如何在RESTEasy 3.0客户端框架(使用ResteasyClientBuilder和ResteasyWebTarget)中设置HTTP头?

Java 如何在RESTEasy 3.0客户端框架(使用ResteasyClientBuilder和ResteasyWebTarget)中设置HTTP头?,java,jax-rs,resteasy,Java,Jax Rs,Resteasy,我正试图找出如何设置HTTP头,类似于这里所解释的: ,还是在这里 但是,我希望使用RESTeasy 3.0功能(ResteasyClientBuilder和ResteasyWebtarget),而不是不推荐使用的ProxyFactory,如下所述: 为了澄清,我也不想在每个请求上设置头/不想将它们传递给客户端,我希望它们设置在ResteasyClientBuilder/ResteasyWebtarget级别(如果可能)。找到了解决方案 诀窍是向ResteasyClient注册Cli

我正试图找出如何设置HTTP头,类似于这里所解释的:

  • ,还是在这里
但是,我希望使用RESTeasy 3.0功能(ResteasyClientBuilder和ResteasyWebtarget),而不是不推荐使用的ProxyFactory,如下所述:

为了澄清,我也不想在每个请求上设置头/不想将它们传递给客户端,我希望它们设置在ResteasyClientBuilder/ResteasyWebtarget级别(如果可能)。

找到了解决方案

诀窍是向ResteasyClient注册ClientRequestFilter(下面方法的第2行):

然后让您的请求筛选器执行以下操作:

public class AuthHeadersRequestFilter implements ClientRequestFilter {

    private final String authToken;

    public AuthHeadersRequestFilter(Credentials credentials) {
        authToken = credentials.getAuthorizationHeader();
    }

    @Override
    public void filter(ClientRequestContext requestContext) throws IOException {
        requestContext.getHeaders().add("Authorization", authToken);
    }
}

@这是线程安全的吗。例如,如果我在第一个请求中有4个头,在第二个请求中有3个头,那么这个第二个请求会有3个或4个头吗?我不确定我是否正确理解这个问题,但是。。。我很确定这是线程安全的。正如您所看到的,过滤器获取ClientRequestContext,因此我看不出两个请求如何相互影响。当然,这是假设所有请求使用相同的凭据,并且没有其他筛选器设置相同的头。我发现了另一篇更老的文章:希望这有帮助!
public class AuthHeadersRequestFilter implements ClientRequestFilter {

    private final String authToken;

    public AuthHeadersRequestFilter(Credentials credentials) {
        authToken = credentials.getAuthorizationHeader();
    }

    @Override
    public void filter(ClientRequestContext requestContext) throws IOException {
        requestContext.getHeaders().add("Authorization", authToken);
    }
}