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
相关文章推荐
- VMware vSphere Web Services SDK编程指南(五)- 5.4 客户端应用(Web 服务器会话令牌)
- VMware vSphere Web Services SDK编程指南(五)- 5.5 客户端应用(vSphere API 多个版本)
- VMware vSphere Web Services SDK编程指南(五)- 5.1 客户端应用(vCenter 服务器连接)
- VMware vSphere Web Services SDK编程指南(八)- 8.7 使用凭据库自动登录
- VMware vSphere Web Services SDK编程指南(十一)- 11.2 使用分布式虚拟交换机
- VMware vSphere Web Services SDK编程指南(八)- 8.8 使用 LicenseManager 管理许可证
- VMware vSphere Web Services SDK编程指南(八)- 8.5 使用 AuthorizationManager 管理角色和权限
- VMware vSphere Web Services SDK编程指南(八)- 8.2 ESXi 和 vCenter 服务器的认证和授权
- VMware vSphere Web Services SDK编程指南(七)- 7.4 PropertyCollector 示例 (RetrievePropertiesEx)
- VMware vSphere Web Services SDK编程指南(十)- 10.7 创建及管理 Datastores
- VMware vSphere Web Services SDK编程指南(十)- 10.6 配置 iSCSI 存储
- VMware vSphere Web Services SDK编程指南(十一)- 11.1 vSphere Networks
- VMware vSphere Web Services SDK编程指南(六)- 6 Datacenter Inventory
- VMware vSphere Web Services SDK编程指南(八)- 8.1 认证和授权(相关对象)
- VMware vSphere Web Services SDK编程指南(七)- 7.5 清单遍历
- VMware vSphere Web Services SDK编程指南(十)- 10.8 管理 VMFS 卷拷贝及诊断分区
- VMware vSphere Web Services SDK编程指南(三)- VMware vSphere 和 vSphere Management APIs
- VMware vSphere Web Services SDK编程指南(八)- 8.6 通过 SessionManager 认证用户
- VMware vSphere Web Services SDK编程指南(七)- 7.7 服务器数据传输和 PropertyCollector 性能
- VMware vSphere Web Services SDK编程指南(七)- 7 属性收集器(Property Collector)