java - 如何在 Java 中实现这个 REST get 方法?

标签 java authentication rest

我有以下成功运行的 REST get 请求:

enter image description here

结果是我随后要解析的 XML 文档。我在 Java 中尝试了同样的方法:

我使用以下代码:

public void getRootService() throws ClientProtocolException, IOException {

    HttpGet httpGet = new HttpGet("https://localhost:9443/ccm/rootservices");
    httpGet.setHeader("Accept", "text/xml");
    HttpResponse response = client.execute(httpGet);
    HttpEntity entity = response.getEntity();
    InputStream in = entity.getContent();
    String projectURL = XMLDocumentParser.parseDocument(in);

    System.out.println(projectURL);
    HttpGet getProjectsRequest = new HttpGet("https://localhost:9443/ccm/process/project-areas");
    getProjectsRequest.setHeader("Content-Type", "application/xml;charset=UTF-8");
    getProjectsRequest.setHeader("Accept-Charset", "UTF-8");
    getProjectsRequest.setHeader("Accept", "application/xml");


    ResponseHandler<String> handler = new BasicResponseHandler();
    String projectResponse = client.execute(getProjectsRequest, handler);
    //String projectResponse = client.execute(getProjectsRequest, handler);

    System.out.println(projectResponse);

}

但是我该如何进行身份验证呢?我试图为值“Authorization”添加另一个 header 字段,但我没有得到相同的结果。

最佳答案

我认为您必须创建一个 UsernamePasswordCredentials,类似于(未测试);

CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(
    new AuthScope("somehost", AuthScope.ANY_PORT), 
    new UsernamePasswordCredentials("username", "password"));

HttpClient httpclient = new DefaultHttpClient();
httpclient.setCredentialsProvider(credsProvider);

参见 http://hc.apache.org/httpcomponents-client-ga/tutorial/html/authentication.html

编辑:
刚刚尝试了以下代码并在我们受 BASIC 保护的开发环境中成功调用了 REST 服务。

public static void main(String[] args) throws ClientProtocolException, IOException {
    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(
        new AuthScope("dev.*******.com", AuthScope.ANY_PORT), 
        new UsernamePasswordCredentials("*****", "******"));


    DefaultHttpClient client = new DefaultHttpClient();
    client.setCredentialsProvider(credsProvider);

    String url = "http://dev.******.com:18081/path/to/service/id.xml";

    HttpGet get = new HttpGet(url);
    ResponseHandler<String> handler = new BasicResponseHandler();
    String resp = client.execute(get, handler);

    System.out.println(resp);
  }

关于java - 如何在 Java 中实现这个 REST get 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7725043/

相关文章:

java - 无法在 jbpm 6.1.0 中运行包含预定义电子邮件服务任务的进程

java - BufferedImage.getGraphics().drawImage() 改变像素值

java - 实现接口(interface)的类应该只能添加同一个类的对象

authentication - WebSecurity.GeneratePasswordResetToken 返回错误(但用户存在!)

rest - 通过 REST API 将证书从 Azure Key Vault 添加到 Azure 应用服务

Java:通过另一个元素的索引查找元素

authentication - BasicAuth、OAuth 和 XAuth 之间有什么区别?

apache - Apache中的Kerberos用户身份验证

web-services - 为其他人实现和我的软件使用定义网络服务的最佳方式

json - Curl 到高级休息客户端