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

xiaoxiao2021-02-28  93

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

转载请注明原文地址: https://www.6miu.com/read-19737.html

最新回复(0)