JSignPdf0.9.0批处理及用于Java web项目时的bug

王朝学院·作者佚名  2009-12-20
窄屏简体版  字體: |||超大  

最近做的一个项目中客户有个需求,要求对给他们的客户下载的证书进行数字签名。因此,项目中用到开源项目JSignPdf 0.9.0版(以下简称:J09)实现对pdf文件的数字签名。在使用的过程中,发现了J09的一个bug。

J09声称在命令行模式(command line batch mode)下可以实现批处理操作,其中,有一个参数“-ka”用于指定密钥文件(keystore file)中的密钥别名(key alias),若不指定则默认取文件中的第一个密钥。

环境:密钥文件使用Adobe pdf Reader 9生成,类型为PKCS12(.pfx文件);后面说的Java web项目基于Struts2 + Spring框架,将J09的入口类Signer做简单修改后作为Action类的成员变量,模拟命令行参数实现对pdf文件进行数字签名。

问题:当执行批处理(参数中有多个待签名pdf文件),同时又指定了“-ka”参数(如“-ka 1”,此时理论上应该和不指定该参数是一样的,但实际上不一样)时,对第一个pdf文件签名一切正常,到第二个的时候就抛出如下异常

java.lang.NullPointerException

at com.lowagie.text.pdf.PdfPKCS7.<init>(Unknown Source)

at com.lowagie.text.pdf.PdfSigGenericPKCS.setSignInfo(Unknown Source)

at com.lowagie.text.pdf.PdfSignatureAppearance.preClose(Unknown Source)

at com.lowagie.text.pdf.PdfSignatureAppearance.preClose(Unknown Source)

at com.lowagie.text.pdf.PdfStamper.close(Unknown Source)

at net.sf.jsignpdf.SignerLogic.run(SignerLogic.java:168)

at net.sf.jsignpdf.Signer.signFiles(Signer.java:120)

at net.sf.jsignpdf.Signer.main(Signer.java:68)

而只有不指定“-ka”参数时,才能实现真正的批处理操作。因此,要想实现批处理,一定不能指定-ka参数,此时意味着密钥文件中只能有一个密钥(严格地说应该是只能使用密钥文件中的第一个密钥)。

以上是在Windows命令行下直接使用其jar包的情况。而当把J09源码用于应用了Struts2+Spring框架的Java web项目时(Spring 版本2.5,对于其他情况,本人没有实践无发言权),则无论如何一定不能指定“-ka”参数,否则即使一次只签名一个文件,到第二次签名操作时,一定会抛出上述异常,即使每次操作都将整个类重新new一个也无法幸免!(呵呵,如果不嫌麻烦,每签名一次就将项目重启一次,这

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/notjusttech/archive/2009/12/17/5028184.aspx

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航