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

最近做的一个项目中客户有个需求,要求对给他们的客户下载的证书进行数字签名。因此,项目中用到开源项目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一个也无法幸免!(呵呵,如果不嫌麻烦,每签名一次就将项目重启一次,这样倒是可以^_^)。

上述如有不对之处,欢迎指正。欢迎交流探讨。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值