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

My application encrypts pdf files OK with itext on local server but fails on QA server

我使用的是 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 环境)returns 500 错误,但在日志文件中没有发生异常的痕迹。

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

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

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

感谢 Bruno 和 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 以指定从应用程序加载某个包,请将 prefer-application-packages 描述符元素添加到 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