您的位置:首页 > 编程语言

VMware vSphere Web Services SDK编程指南(五)- 5.3 客户端应用(使用用户名和密码凭证建立一个会话)

2017-08-05 22:11 696 查看

5.3 使用用户名和密码凭证建立一个会话

本章包括以下主题:

5.1 vCenter 服务器连接

5.2 与 vCenter 服务器建立一个单点登录会话

5.3 使用用户名和密码凭证建立一个会话

5.4 Web 服务器会话令牌

5.5 vSphere API 的多个版本

5.6 标识由服务器支持的API版本

5.7 Sample 应用程序

接前篇从第3节开始

你可以指定用户名和密码凭证来建立一个与 vCenter 服务器的会话,但是用这种方式来建立会话的方法已被 vSphere 5.1 弃用

下列步骤描述了客户端应用是如何指定用户名和密码凭证访问 vCenter 服务器的。

创建一个到 vSphere server web 服务的连接;

实例化一个用于引用 ServiceInstance 的本地代理对象,使用该代理对象从服务器获取 ServiceContent 对象。ServiceContent 包含对清单的 root folder 的引用,以及对提供vSphere 服务的托管对象的引用;

实例化一个用于访问 vSphere 服务的本地代理对象;

使用恰当的凭证(用户名、密码等)登录服务器;

访问服务器端对象获取数据并执行管理操作;

关闭连接

下面直接给出客户端应用测试代码

Example: Java 客户端应用测试

import com.vmware.vim25.*;
import java.util.*;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.soap.SOAPFaultException;

public class TestClient {

// Authentication is handled by using a TrustManager and supplying
// a host name verifier method. (The host name verifier is declared
// in the main function.)
// See Example: Obtaining a Session Token - Code Fragments from
// VMPromoteDisks.java for more details.
private static class TrustAllTrustManager implements
javax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager {

public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}

public boolean isServerTrusted(
java.security.cert.X509Certificate[] certs) {
return true;
}

public boolean isClientTrusted(
java.security.cert.X509Certificate[] certs) {
return true;
}

public void checkServerTrusted(
java.security.cert.X509Certificate[] certs, String authType)
throws java.security.cert.CertificateException {
return;
}

public void checkClientTrusted(
java.security.cert.X509Certificate[] certs, String authType)
throws java.security.cert.CertificateException {
return;
}
}

public static void main(String[] args) {
try {
// Server URL and credentials.
String serverName = args[0];
String userName = args[1];
String password = args[2];
String url = "https://" + serverName + "/sdk/vimService";

// Variables of the following types for access to the API methods
// and to the vSphere inventory.
// -- ManagedObjectReference for the ServiceInstance on the Server
// -- VimService for access to the vSphere Web service
// -- VimPortType for access to methods
// -- ServiceContent for access to managed object services
ManagedObjectReference SVC_INST_REF = new ManagedObjectReference();
VimService vimService;
VimPortType vimPort;
ServiceContent serviceContent;

// Declare a host name verifier that will automatically enable
// the connection. The host name verifier is invoked during
// the SSL handshake.
HostnameVerifier hv = new HostnameVerifier() {
public boolean verify(String urlHostName, SSLSession session) {
return true;
}
};
// Create the trust manager.
javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];
javax.net.ssl.TrustManager tm = new TrustAllTrustManager();
trustAllCerts[0] = tm;

// Create the SSL context
javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext
.getInstance("SSL");

// Create the session context
javax.net.ssl.SSLSessionContext sslsc = sc
.getServerSessionContext();

// Initialize the contexts; the session context takes the trust
// manager.
sslsc.setSessionTimeout(0);
sc.init(null, trustAllCerts, null);

// Use the default socket factory to create the socket for the
// secure connection
javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc
.getSocketFactory());
// Set the default host name verifier to enable the connection.
HttpsURLConnection.setDefaultHostnameVerifier(hv);

// Set up the manufactured managed object reference for the
// ServiceInstance
SVC_INST_REF.setType("ServiceInstance");
SVC_INST_REF.setValue("ServiceInstance");

// Create a VimService object to obtain a VimPort binding provider.
// The BindingProvider provides access to the protocol fields
// in request/response messages. Retrieve the request context
// which will be used for processing message requests.
vimService = new VimService();
vimPort = vimService.getVimPort();
Map<String, Object> ctxt = ((BindingProvider) vimPort)
.getRequestContext();

// Store the Server URL in the request context and specify true
// to maintain the connection between the client and server.
// The client API will include the Server's HTTP cookie in its
// requests to maintain the session. If you do not set this to true,
// the Server will start a new session with each request.
ctxt.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url);
ctxt.put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true);

// Retrieve the ServiceContent object and login
serviceContent = vimPort.retrieveServiceContent(SVC_INST_REF);
vimPort.login(serviceContent.getSessionManager(), userName,
password, null);

// print out the product name, server type, and product version
System.out.println(serviceContent.getAbout().getFullName());
System.out.println("Server type is "
+ serviceContent.getAbout().getApiType());
System.out.println("API version is "
+ serviceContent.getAbout().getVersion());

// close the connection
vimPort.logout(serviceContent.getSessionManager());
} catch (Exception e) {
System.out.println(" Connect Failed ");
e.printStackTrace();
}
}// end main()
}// end class TestClient


使用下列命令编译示例代码:

c:>javac -classpath path-to-vim25.jar TestClient.java


使用下面的命令执行编译的 class 文件

c:>java -classpath path-to-vim25.jar TestClient web-service-url user-name user-password


原文:

VMware vSphere 6.5 Documentation Center:Client Applications
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐