3

RESTEasy Proxy Framework用来打电话给我的休息服务。我想对代理框架使用抢先式身份验证。

那是我当前的代码:

public void callSomeService() throws Exception {

    RegisterBuiltin.register(ResteasyProviderFactory.getInstance());

    DefaultHttpClient client = new DefaultHttpClient();
    UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(
            USERNAME, PASSWORD);
    AuthScope authscope = new AuthScope(AuthScope.ANY_HOST,
            AuthScope.ANY_PORT, AuthScope.ANY_REALM);
    client.getCredentialsProvider().setCredentials(authscope, credentials);
    ApacheHttpClient4Executor executer = new ApacheHttpClient4Executor(client);
    dummyResource = ProxyFactory.create(DummyResource.class,
            "http://localhost:8888/myapp/rest/", executer);

    // Do some calls here       
}

当我监控应用程序的流量时,Rest-Service 会被调用两次:

  1. 首先客户端收到 401 错误(未授权)
  2. 在第二个请求中添加了授权标头,一切正常。

我真正想做的是在第一个请求中已经添加了授权标头!我怎样才能做到这一点?

我正在使用 RESTEasy 2.3.5!我还阅读了文档(http://docs.jboss.org/resteasy/docs/2.3.5.Final/userguide/html_single/index.html#transport_layer),其中给出了抢占式身份验证的示例,但实际上不起作用,因为这段代码:

BasicScheme basicAuth = new BasicScheme();
authCache.put("com.bluemonkeydiamond.sippycups", basicAuth);
4

1 回答 1

0

没错,文档中的示例无法编译。尝试用 HttpHost 的实例替换字符串“com.bluemonkeydiamond.sippycups”。HttpHost 类有几个构造函数,因此请务必查看 JavaDocs。最简单的构造函数接受一个字符串。例如,

BasicScheme basicAuth = new BasicScheme();
authCache.put(new HttpHost("com.bluemonkeydiamond.sippycups"), basicAuth);
于 2013-12-11T00:48:11.067 回答