RESTEasy客户端框架身份validation凭据

RESTEasy(一个JAX-RS实现)有一个很好的客户端框架,例如:

ServiceApi client = ProxyFactory.create(ServiceApi.class, baseUri); 

如何为此客户端提供HTTP身份validation凭据?

jnorris的答案使用了一些弃用的类。 以下是使用未弃用类的更新方法。

  import org.apache.http.HttpStatus; import org.apache.http.auth.Credentials; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.impl.client.DefaultHttpClient; ... DefaultHttpClient httpClient = new DefaultHttpClient(); Credentials credentials = new UsernamePasswordCredentials(userName, password); httpClient.getCredentialsProvider().setCredentials( org.apache.http.auth.AuthScope.ANY, credentials); ClientExecutor clientExecutor = new ApacheHttpClient4Executor( httpClient); proxy = ProxyFactory .create(UserAccessProxy.class, host, clientExecutor); 

可以使用ClientExecutor提供凭据。

  Credentials credentials = new UsernamePasswordCredentials(userId, password); HttpClient httpClient = new HttpClient(); httpClient.getState().setCredentials(AuthScope.ANY, credentials); httpClient.getParams().setAuthenticationPreemptive(true); ClientExecutor clientExecutor = new ApacheHttpClientExecutor(httpClient); ServiceApi client = ProxyFactory.create(ServiceApi.class, baseUri, clientExecutor); 

也许是这样的(使用RestEasy 2.3.1):

 //(...imports...) import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.impl.client.DefaultHttpClient; import org.jboss.resteasy.client.ClientRequest; import org.jboss.resteasy.client.ClientResponse; import org.jboss.resteasy.client.core.executors.ApacheHttpClient4Executor; //(...code...) private static final String ENDPOINT = "the_rest_endpoint_here"; String username = ""; String password = ""; DefaultHttpClient client = new DefaultHttpClient(); client.getCredentialsProvider().setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password)); ApacheHttpClient4Executor executer = new ApacheHttpClient4Executor(client); ClientRequest req = new ClientRequest(ENDPOINT, executer); ClientResponse res = req.get(String.class); System.out.println(res.getEntity()); res.close(); 

……或者使用RestEasy 3.0.18

 //(...imports...) import javax.ws.rs.core.Response; import org.jboss.resteasy.client.jaxrs.BasicAuthentication; import org.jboss.resteasy.client.jaxrs.ResteasyClient; import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder; import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget; //(...code...) private static final String ENDPOINT = "the_rest_endpoint_here"; String usertoken = ""; String password = ""; //with proxy(comment this if not using) ResteasyClient client = new ResteasyClientBuilder() .defaultProxy("my_proxy", 8080, "http") .build(); ResteasyWebTarget target = client.target(ENDPOINT); target.register(new BasicAuthentication(usertoken, password)); Response response = target.request().get(); System.out.println(response.readEntity(String.class)); response.close();