Java 使用智能卡的Web服务呼叫速度
我对使用智能卡进行身份验证时Web服务调用的速度有疑问。我能做点什么来加快这一进程吗?如果我调用公共web服务,速度是几秒钟。代码有问题吗? 现在是:Java 使用智能卡的Web服务呼叫速度,java,web-services,keystore,smartcard,Java,Web Services,Keystore,Smartcard,我对使用智能卡进行身份验证时Web服务调用的速度有疑问。我能做点什么来加快这一进程吗?如果我调用公共web服务,速度是几秒钟。代码有问题吗? 现在是: 07:48:31: ->Kreiranje trust manager-a --Trust Manager 07:48:31: ->keystore manager -- Keystore Manager 07:48:43:-> ssl context 07:48:43: -> postavljanje konekcij
07:48:31: ->Kreiranje trust manager-a --Trust Manager
07:48:31: ->keystore manager -- Keystore Manager
07:48:43:-> ssl context
07:48:43: -> postavljanje konekcije --request parameters
07:48:43: ->slanje podataka -- sending data
07:49:00: -> primanje podataka -- receiving data
07:49:01: ->ispis podataka
public void callWS() {
String soapMessage = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:hz=\"http://www.hz....hr/\">"
+ "<soapenv:Header/>"
+ "<soapenv:Body>"
+ "<hz>"
+ "<!--You have a CHOICE of the next 3 items at this level-->"
+ "<hz>155232113</hz>"
+ "</hz>"
+ "</soapenv:Body>"
+ "</soapenv:Envelope>";
HttpsURLConnection connSSL = null;
String timeStamp = new SimpleDateFormat("HH:mm:ss").format(Calendar
.getInstance().getTime());
System.out.println(timeStamp + ": ->Kreiranje trust manager-a");
TrustManager[] trustAll = { new X509TrustManager() {
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public void checkClientTrusted(X509Certificate[] certs,
String authType) {
}
@Override
public void checkServerTrusted(X509Certificate[] certs,
String authType) {
}
public boolean isServerTrusted(X509Certificate[] certs) {
return true;
}
public boolean isClientTrusted(X509Certificate[] certs) {
return true;
}
} };
timeStamp = new SimpleDateFormat("HH:mm:ss").format(Calendar
.getInstance().getTime());
System.out.println(timeStamp + ": ->keystore manager");
try {
KeyManagerFactory kmf = KeyManagerFactory
.getInstance(KeyManagerFactory.getDefaultAlgorithm());
KeyStore ks = KeyStore.getInstance("Windows-MY", "SunMSCAPI");
ks.load(null, null);
kmf.init(ks, null);
// KeyManager[] myKms = { new MyX509KeyMananger(this.p12File,
// this.privateKeyPassword) };
timeStamp = new SimpleDateFormat("HH:mm:ss").format(Calendar
.getInstance().getTime());
System.out.println(timeStamp + ":-> ssl context");
SSLContext sslcont = SSLContext.getInstance("SSL");
// kmf.getKeyManagers()
sslcont.init(kmf.getKeyManagers(), trustAll, null);
SSLSocketFactory factory = sslcont.getSocketFactory();
HttpsURLConnection.setDefaultSSLSocketFactory(factory);
timeStamp = new SimpleDateFormat("HH:mm:ss").format(Calendar
.getInstance().getTime());
System.out.println(timeStamp + ": -> postavljanje konekcije");
} catch (NoSuchAlgorithmException e) {
// throw new
// ConnectionManagerException("No Such Algorithm Exception: " +
// e.getMessage());
System.out.println(e.getLocalizedMessage());
} catch (KeyManagementException e) {
// throw new ConnectionManagerException("Key Management Exception: "
// + e.getMessage());
System.out.println(e.getLocalizedMessage());
} catch (Exception e) {
// throw new
// ConnectionManagerException("MyX509KeyManager Exception: " +
// e.getMessage());
System.out.println(e.getLocalizedMessage());
}
String res = "";
String url = "https:.....";
String SOAPAction = "https:/operation";
try {
URL urlSSL = new URL(null, url);
BufferedReader in;
connSSL = (HttpsURLConnection) urlSSL.openConnection();
connSSL.setRequestProperty("Content-Type",
"text/xml; charset=utf-8");
connSSL.setRequestProperty("Content-Length",
String.valueOf(soapMessage.length()));
connSSL.setRequestProperty("SOAP-Action", SOAPAction);
connSSL.setRequestMethod("POST");
connSSL.setDoOutput(true);
connSSL.setConnectTimeout(5000);
timeStamp = new SimpleDateFormat("HH:mm:ss").format(Calendar
.getInstance().getTime());
System.out.println(timeStamp + ": ->slanje podataka");
/*
* PrintWriter out = new PrintWriter(new BufferedWriter( new
* OutputStreamWriter(connSSL.getOutputStream())));
* out.println(soapMessage); out.flush();
*/
DataOutputStream wr = null;
wr = new DataOutputStream(connSSL.getOutputStream());
wr.writeBytes(soapMessage);
wr.flush();
wr.close();
timeStamp = new SimpleDateFormat("HH:mm:ss").format(Calendar
.getInstance().getTime());
System.out.println(timeStamp + ": -> primanje podataka");
in = new BufferedReader(new InputStreamReader(
connSSL.getInputStream(), "UTF-8"));
String inputLine;
while ((inputLine = in.readLine()) != null) {
res = res + inputLine;
}
in.close();
connSSL.disconnect();
timeStamp = new SimpleDateFormat("HH:mm:ss").format(Calendar
.getInstance().getTime());
System.out.println(timeStamp + ": ->ispis podataka");
System.out.println(res);
} catch (Exception e) {
System.out.println(e.getLocalizedMessage());
}
}
07:48:31:->Kreiranje信托经理-a--信托经理
07:48:31:->密钥库管理器--密钥库管理器
07:48:43:->ssl上下文
07:48:43:->postavljanje konekcije--请求参数
07:48:43:->slanje podataka--发送数据
07:49:00:->primanje podataka——接收数据
07:49:01:->ispis podataka
公共无效callWS(){
字符串soapMessage=“”
+ ""
+ ""
+ ""
+ ""
+ "155232113"
+ ""
+ ""
+ "";
HttpsURLConnection connsl=null;
字符串时间戳=新的SimpleDataFormat(“HH:mm:ss”)。格式(日历
.getInstance().getTime());
System.out.println(timeStamp+“:->Kreiranje trust manager-a”);
TrustManager[]trustAll={new X509TrustManager(){
@凌驾
公共X509证书[]getAcceptedIssuers(){
返回null;
}
@凌驾
公共无效checkClientTrusted(X509Certificate[]证书,
字符串(authType){
}
@凌驾
公共无效checkServerTrusted(X509Certificate[]证书,
字符串(authType){
}
公共布尔值isServerTrusted(X509Certificate[]证书){
返回true;
}
公共布尔值受信任(X509Certificate[]证书){
返回true;
}
} };
时间戳=新的SimpleDataFormat(“HH:mm:ss”)。格式(日历
.getInstance().getTime());
System.out.println(timeStamp+“:->密钥库管理器”);
试一试{
KeyManagerFactory kmf=KeyManagerFactory
.getInstance(KeyManagerFactory.getDefaultAlgorithm());
KeyStore ks=KeyStore.getInstance(“Windows我的”、“SunMSCAPI”);
ks.load(null,null);
kmf.init(ks,null);
//KeyManager[]myKms={new myx509keymanager(this.p12文件,
//此.privateKeyPassword)};
时间戳=新的SimpleDataFormat(“HH:mm:ss”)。格式(日历
.getInstance().getTime());
System.out.println(timeStamp+“:->ssl上下文”);
SSLContext sslcont=SSLContext.getInstance(“SSL”);
//kmf.getKeyManagers()
sslcont.init(kmf.getKeyManagers(),trustAll,null);
SSLSocketFactory=sslcont.getSocketFactory();
HttpsURLConnection.setDefaultSSLSocketFactory(工厂);
时间戳=新的SimpleDataFormat(“HH:mm:ss”)。格式(日历
.getInstance().getTime());
System.out.println(timeStamp+“:->postavljanje-konekcije”);
}捕获(无算法异常){
//抛出新的
//ConnectionManagerException(“无此类算法异常:”+
//e.getMessage());
System.out.println(e.getLocalizedMessage());
}捕获(密钥管理异常e){
//抛出新的ConnectionManagerException(“密钥管理异常:”
//+e.getMessage());
System.out.println(e.getLocalizedMessage());
}捕获(例外e){
//抛出新的
//ConnectionManagerException(“MyX509KeyManager异常:”+
//e.getMessage());
System.out.println(e.getLocalizedMessage());
}
字符串res=“”;
字符串url=“https:…”;
字符串SOAPAction=“https:/operation”;
试一试{
URL urlSSL=新URL(空,URL);
缓冲读取器;
connsl=(HttpsURLConnection)urlsl.openConnection();
connsl.setRequestProperty(“内容类型”,
“text/xml;charset=utf-8”);
setRequestProperty(“内容长度”,
String.valueOf(soapMessage.length());
setRequestProperty(“SOAP操作”,SOAPAction);
connsl.setRequestMethod(“POST”);
connsl.setDoOutput(true);
connsl.setConnectTimeout(5000);
时间戳=新的SimpleDataFormat(“HH:mm:ss”)。格式(日历
.getInstance().getTime());
System.out.println(timeStamp+“:->slanje podataka”);
/*
*PrintWriter out=新的PrintWriter(新的缓冲写入程序(新的
*OutputStreamWriter(connsl.getOutputStream());
*out.println(soapMessage);out.flush();
*/
DataOutputStream wr=null;
wr=新的DataOutputStream(connsl.getOutputStream());
wr.writeBytes(soapMessage);
wr.flush();
wr.close();
时间戳=新的SimpleDataFormat(“HH:mm:ss”)。格式(日历
.getInstance().getTime());
System.out.println(timeStamp+“:->primanje-podataka”);
in=新的BufferedReader(新的InputStreamReader(
getInputStream(),“UTF-8”);
字符串输入线;
而((inputLine=in.readLine())!=null){
res=res+输入线;
}
in.close();
connsl.disconnect();
时间戳=新的SimpleDataFormat(“HH:mm:ss”)。格式(日历
.getInstance().getTime());
System.out.println(timeStamp+“:->ispispodataka”);
系统输出打印项次(res);
}捕获(例外e){
System.out.println(e.getLocalizedMessage());
}
}
2个值得研究的建议--1。每次调用都必须初始化密钥库吗?不能只加载一次密钥库和工厂吗?从那里我可以看到