基于 Jazz 平台的 IBM® Rational Team Concert 提供了一个简洁的协作式生命周期管理解决方案。Rational Team Concert 的一个重要特性是它与外部系统集成的能力。每一个 Jazz 产品本身都具有用于读取和写入信息的 OSLC 服务,在 Jazz 和其他工具之间提供了简单的集成点。OSLC 使用 REST API 提供服务,因此,标准的标注可为每种语言和平台提供信息。本文演示了如何使用 Java 在 Rational Team Concert 中验证、连接、检索和存储信息。
使用 SSL 证书连接到 Rational Team Concert
在默认情况下,如果服务器被配置为使用安全套接字层(SSL),那么 Rational Team Concert 会使用自签名证书。在连接到 Rational Team Concert 之前,您必须接受自签名证书。为此,首先需要创建一个新的 TrustManager 对象,它通过检查有效期限、证书签名等来接受和验证 SSL 证书。
接下来,要创建一个新的 Array 对象,其中包含一个 TrustManager 实例,该示例实现了接口 X509TrustManager。请覆盖接口的方法,以确保没有执行验证检查。参见清单 1:
清单 1. 覆盖接口 X509TrustManager 的方法
public static void main(String[] args) throws ClientProtocolException, IOException, Key
ManagementException, NoSuchAlgorithmException { TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { public X509Certificate[] getAcceptedIssuers() { return null; } public void checkclientTrusted(X509Certificate[] certs, String authType) { // Leave blank to trust every client } public void checkServerTrusted(X509Certificate[] certs, String authType) { // Leave blank to trust every server } public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { // TODO Auto-generated method stub } } };
接下来,要创建一个 SSLContext 的实例:
SSLContext mySSLContext = SSLContext.getInstance("SSL");
然后,使用我们创建的 TrustManager 实例初始化 SSLContext:
mySSLContext.init(null, trustAllCerts, new java.security.SecureRandom());
最后,覆盖默认的 SSLSocketFactory,它来自 HttpsURLConnection 服务,供 Apache HTTP 客户端在其连接中使用。该步骤可确保 HttpsURLConnection 将使用我们刚刚创建的 SSL 上下文:
HttpsURLConnection.setDefaultSSLSocketFactory(mySSLContext.getSocketFactory());
现在,您已经接受了自签名证书。必须先完成这一步,以确保证书在整个会话过程中都被接受。
身份验证凭据
现在,您要创建建立与服务器的连接所需的所有 Java 对象。连接本身与您为了实现任何 Get 过程而创建的连接几乎是相同的。使用 Apache 库来创建连接,并提供所需的参数。
创建以下对象:
DefaultHttpClient httpclient = new DefaultHttpClient();
CookieStore cookieStore = new BasicCookieStore();HttpContext localContext = new BasicHttpContext();localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
使用想要连接的服务器的 URL 来实例化一个对象 HttpGet(如果有必要,包括门),后面是 /jazz /authenticated/identity:
HttpGet httpGetID = new HttpGet("https://localhost:7443/ccm/authenticated/identity");
现在存储了服务器 URL,创建了会话,并以 Cookie 的形式将它记录在本地。利用您之前创建的对象来调用 HttpClient 对象的执行方法。您刚刚保存了 cookie,所以应该关闭连接:
httpclient.execute(httpGetID, localContext);httpGetID.abort();
如果想确保正确地创建了 cookie,可以尝试检索所保存的信息:
List<Cookie> cookies1 = cookieStore.getCookies();for (Cookie cookie : cookies1) { System.out.println("\t" + cookie.getName() + " :" + cookie.getValue());}
下一步是使用有效的用户名和密码凭据,通过 j_security_check 进行身份验证。在这一步中,我们使用了 Apache HttpClient 类 NameValuePair:
List<NameValuePair> authFormParams = new ArrayList<NameValuePair>();authFormParams.add(new BasicNameValuePair("j_username", "TestJazzAdmin1"));authFormParams.add(new BasicNameValuePair("j_password", "TestJazzAdmin1"));
现在,构建一个 UrlEcodedFormEntity,它编码 URL 和凭据,并执行一个 HTTP Post。参见清单 2:
清单 2. 构建一个 UrlEcodedFormEntity
UrlEncodedFormEntity encodedentity = new UrlEncodedFormEntity(authFormParams, "UTF-8"); HttpPost httpPostAuth = new httpPost("\ https://localhost:7443/ccm/authenticated/j_security_check"); httpPostAuth.setEntity(encodedentity);httpclient.execute(httpPostAuth, localContext);
现在最好检查一下是否已经正确创建了 cookie,以避免之后在连接过程中可能出现的任何问题。此代码只是提供信息,但是,如果想确保 cookie 已被正确地存储,请尝试检索所保存的信息:
List<Cookie> cookies2 = cookieStore.getCookies();for (Cookie cookie : cookies2) { System.out.println("\t" + cookie.getName() + " :" + cookie.getValue());}
如果 cookie 被正确存储,那么您的登录已经被验证,而且您可以访问到 Rational Team Concert。