我想使用我拥有的证书来调用安全的Web服务...服务器需要很长时间才能使用证书进行身份验证,并且,虽然第一次就可以了,但用户会一遍又一遍地调用它再次(在相同的“会话”中),我觉得我应该能够重用连接。
我有以下代码。
System.setProperty("javax.net.ssl.trustStorePassword", "");
System.setProperty("javax.net.ssl.trustStore", "trusted.cacerts");
System.setProperty("javax.net.ssl.keyStorePassword", "mypassword");
System.setProperty("javax.net.ssl.keyStore", "trusted.clientcerts");
URL url = new URL("https://remoteserver:8443/testservice");
HttpsURLConnection connection = (HttpsURLConnection)url.openConnection();
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "text/xml");
connection.setDoOutput(true);
OutputStream os = connection.getOutputStream();
os.write(bytes);
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
connection.disconnect();
这很有效......但速度很慢。只需要身份验证大约需要10秒钟。此内部身份验证在此处是典型的,无法加速。但我不能以某种方式重复使用它吗?
我尝试在url.connection
和断开连接之间围绕此代码循环,以为我可以一次又一次地回忆它,但是失败了(500)。为了第一次只做一些命令,我尝试了一点点移动,但它仍然失败
我读到了keep-alive,但是没有找到任何关于这是什么的好例子,以及如何使用它(如果这甚至是一种有效的方式)。如果我通过HTML,通过Firefox或IE完成所有这些操作,浏览器能够缓存证书,我猜,所以每次第一次快速开始之后。我可以效仿一些吗?
答案 0 :(得分:1)
更好的选择是使用HttpClient及其连接池机制。还看看https keep-alive是否会帮助你
答案 1 :(得分:0)
尽量不要致电connection.disconnect()
......我认为你不应该这样做。但是,您应该确保在完成后关闭reader
。