在Glassfish集群上部署JSF应用程序

时间:2009-08-26 11:59:24

标签: deployment jsf java-ee glassfish

当我在Glassfish V2.1 Patch02群集上部署JSF应用程序时,加载第一页时会抛出以下异常。


java.security.ProviderException: update() failed
    at  sun.security.pkcs11.P11Cipher.implUpdate(P11Cipher.java:557)
    at  sun.security.pkcs11.P11Cipher.engineUpdate(P11Cipher.java:457)
    at  sun.security.pkcs11.P11Cipher.engineDoFinal(P11Cipher.java:485)
    at  sun.security.pkcs11.P11Cipher.engineDoFinal(P11Cipher.java:471)
    at  javax.crypto.Cipher.doFinal(DashoA13*..)
...
Caused  by: sun.security.pkcs11.wrapper.PKCS11Exception: CKR_DEVICE_ERROR
    at  sun.security.pkcs11.wrapper.PKCS11.C_EncryptUpdate(Native Method)
    at  sun.security.pkcs11.P11Cipher.implUpdate(P11Cipher.java:510)

我在我的应用程序中没有使用任何类型的加密/解密。

当我搜索此异常时,我发现this是在应用程序中加载密码时的情况。

我想知道Glassfish / JSF是否加载了导致此异常的默认密码?

如果没有,可能的原因和解决方案是什么?

3 个答案:

答案 0 :(得分:1)

问题已经解决。问题是这个“小问题” - https://issues.apache.org/jira/browse/MYFACES-1786

解决方案是将以下条目放在web.xml中以禁用状态管理加密并将状态保存切换到服务器

<context-param>
        <param-name>org.apache.myfaces.USE_ENCRYPTION</param-name>
        <param-value>false</param-value>
</context-param> 

<context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>server</param-value>
</context-param> 

根据我的经验,在Websphere(独立或群集)中使用'default'启用加密(即在web.xml中没有org.apache.myfaces.USE_ENCRYPTION条目)部署的应用程序完全正常。

但是应用程序没有部署在Glassfish集群或Tomcat 6中(问题在线程中定义 - nabble.com/BadPadding-Exception-and-more-td21984713.html)

答案 1 :(得分:0)

我能想到基础JSF实现可能使用加密的唯一地方是state management。组件树是有状态的,因此它在会话或隐藏表单字段(由javax.faces.STATE_SAVING_METHOD init参数设置)中的请求之间保留。如果使用隐藏的表单字段,则加密它是明智的,以防止黑客重写服务器状态。 (请注意,JSF中的状态管理是可插入的,因此第三方库可以替换默认行为。如果您使用的是丰富的组件库,则值得检查文档。)

答案 2 :(得分:0)

您可以尝试在非群集glassfish或tomcat中部署您的应用程序,看看您是否遇到相同的情况。然后,您将知道问题是您的应用程序还是应用程序服务器或群集的配置。