Java 使用智能卡的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

我对使用智能卡进行身份验证时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 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。每次调用都必须初始化密钥库吗?不能只加载一次密钥库和工厂吗?从那里我可以看到