JSignPdf0.9.0批处理及用于Java web项目时的bug
2009-12-17 22:38
309 查看
最近做的一个项目中客户有个需求,要求对给他们的客户下载的证书进行数字签名。因此,项目中用到开源项目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一个也无法幸免!(呵呵,如果不嫌麻烦,每签名一次就将项目重启一次,这样倒是可以^_^)。
上述如有不对之处,欢迎指正。欢迎交流探讨。
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一个也无法幸免!(呵呵,如果不嫌麻烦,每签名一次就将项目重启一次,这样倒是可以^_^)。
上述如有不对之处,欢迎指正。欢迎交流探讨。
相关文章推荐
- java web项目整体异常处理机制
- 案例4-3 Ajax的响应处理简单实例(征服Ajax——Web 2.0快速入门与项目实践Java)
- java web 项目中的时间处理
- 简单的Java Web项目(1)——JS获取表单值,处理后写入表单文本框
- javaweb项目高并发处理
- java 及 web中项目url处理
- 编写高质量代码改善java程序的151个建议——[110-117]异常及Web项目中异常处理
- java web项目整体异常处理机制
- javaWeb 项目整体异常处理方案
- java转web项目,Failed while installing Dynamic Web Module 报错问题处理
- 实战突击: Java Web项目整合开发(PDF)
- Java web 项目关于错误页面的处理
- JAVA_OA(十四):SSM练手项目bug-Oracle分页web页面无法转到下一页
- Myeclipse - Web项目转换技巧--处理Java项目、SVN非Web项目问题
- 编写高质量代码改善java程序的151个建议——[110-117]异常及Web项目中异常处理
- 关于javaweb项目乱码处理
- JavaWeb项目架构之Elasticsearch日志处理系统
- ActiveReport中的Chart控件,用于web的pdf导出时的中文不出现处理办法
- java web项目整体异常处理机制
- JavaWeb项目整体异常处理机制