我的应用程序在本地服务器上使用 itext 加密 pdf 文件正常,但在 QA 服务器上失败



我正在使用库itext版本5.5.4和bounce castle 1.49。我的应用程序在我的本地服务器和服务器开发上运行良好。以下语句用于加密:

String userPassord = "4888";
String OwnerPassword = "4850";
writer.setEncryption ( getBytes ( userPassword ) , getBytes ( OwnerPassword ) ,   PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128) ;
private byte[] getBytes(String str){
    return str.getBytes(Charset.forName("UTF-8"));
}

Weblogic 服务器(QA 环境)返回 500 错误,但在日志文件中没有跟踪发生异常。

我认为当指令" writer.setEncryption "运行时可能会发生错误,因为当应用程序生成没有加密密钥的PDF文件时,这在所有环境中都可以正常工作。

我们在所有环境和Java版本1.7中使用WebLogic 12.1.3服务器

知道什么可能会破坏我的应用程序在其他环境中吗? java 配置 ? weblogic 服务器中的配置?

谢谢布鲁诺和 Mkl,错误是:

java.lang.VerifyError: class org.bouncycastle.asn1.ASN1Primitive overrides final method equals.(Ljava/lang/Object;)Z
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at weblogic.utils.classloaders.GenericClassLoader.defineClass(GenericClassLoader.java:412)
        at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:366)
        at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:318)
        at weblogic.utils.classloaders.ChangeAwareClassLoader.findClass(ChangeAwareClassLoader.java:80)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:186)
        at weblogic.utils.classloaders.ChangeAwareClassLoader.loadClass(ChangeAwareClassLoader.java:50)
        at com.itextpdf.text.pdf.PdfEncryption.<init>(PdfEncryption.java:149)
        at com.itextpdf.text.pdf.PdfWriter.setEncryption(PdfWriter.java:2131)

Weblogic中的解决方案.xml:

<wls:container-descriptor>
    <wls:prefer-application-packages>
        <wls:package-name>org.bouncycastle</wls:package-name>
    </wls:prefer-application-packages>      
</wls:container-descriptor>

总部设在:配置过滤类装入器要配置 FilteringClassLoader 以指定从应用程序加载某个包,请将首选应用程序包描述符元素添加到 weblogic-application.xml该元素详细说明要从应用程序加载的包的列表。以下示例指定从应用程序而不是系统类装入器装入 org.apache.log4j.* 和 antlr.* 包:

<prefer-application-packages>
  <package-name>org.apache.log4j.*</package-name>
  <package-name>antlr.*</package-name>
</prefer-application-packages>

https://docs.oracle.com/middleware/1212/wls/WLPRG/classloading.htm#WLPRG315

最新更新