在服务器端,将从接收到的 DataHanlder 对象提取 MimeMessage,以了解事务的详细信息。有关详细信息,请参阅下面的清单 7。
清单 7. 从 DataHandler 提取 MimeMessage——服务器端
public void sendSignedDocument(javax.activation.DataHandler datahandler)
throws java.rmi.RemoteException
{
try{
MimeMessage mimeMessage = null;
java.io.InputStream is = datahandler.getInputStream();
int start = 0;
int num =0;
byte[] image = new byte[50000];
byte[] temp = new byte[1024];
while ((num = is.read(temp)) > 0){
System.out.println("Count ");
System.arraycopy(temp,0,image,start,num);
start+=num;
}
mimeMessage = new javax.mail.internet.MimeMessage
(javax.mail.Session.getDefaultInstance(new Properties(),null),
new ByteArrayInputStream(image));
MimeMultipart mmp = (MimeMultipart)mimeMessage.getContent();
MimeBodyPart part = (MimeBodyPart)mmp.getBodyPart(0);
Object partobj = part.getContent();
InputStream is1 = part.getRawInputStream(); //getContentStream();
byte[] isData = new byte[is1.available()];
is1.read(isData);
is1.close();
byte[] contents1 = isData;
verifySignature(contents1,"This is the Temp Data".getBytes());
java.io.FileOutputStream fos =
new java.io.FileOutputStream("C:\\output.txt");
fos.write(image);
fos.close();
}catch(Exception ex){
ex.printStackTrace();
}
}
清单 8 显示了 VerifySignature 方法:
清单 8. VerifySignature 方法
public static int verifySignature(byte [] signature, byte[] messageContent)
{
int ret=100;
SignerInfo[] signers=null;
SignedData signedData = null;
SignerInfo signer=null;
Properties vcp=null;
X509Certificate cert = null;
try
{
ContentInfo contentInfoEnvData = new ContentInfo(signature);
signedData = (SignedData)contentInfoEnvData.getContent();
cert = loadX509Certificate("C:/temp/PKITS/signingExpPartner.der");
signer = signedData.getSignerInfo(cert);
boolean result = signer.verify(cert,messageContent);
System.out.println("verifySignature result is "+result);
if(result) ret = 100;
else ret = 001;
}
catch (Exception e){
e.printStackTrace();
ret=001;
}
return ret;
}
