2009-08-26 86 views
1

在Glassfish V2.1 Patch02集羣上部署JSF應用程序時,加載第一頁時會引發以下異常。在Glassfish集羣上部署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是否加載了導致此異常的默認密碼?

如果不是,可能的原因和解決方案是什麼?

回答

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(standalone或cluster)中的'默認'(即web.xml中沒有org.apache.myfaces.use_ENCRYPTION的條目)啓用的加密進行部署時,可以體驗該應用程序的工作原理。

但應用程序不被部署在Glassfish的集羣或在Tomcat中6(問題是在線程定義 - nabble.com/BadPadding-Exception-and-more-td21984713.html)

0

我能想到的基本JSF實現可能使用加密的唯一地方是state management。組件樹是有狀態的,所以它在請求之間保留,無論是在會話中還是在隱藏表單字段中(由javax.faces.STATE_SAVING_METHOD init參數設置)。如果使用隱藏表單字段,那麼實施將是明智的加密它,以防止黑客重寫服務器狀態。 (注意JSF是狀態管理是可插拔的,那麼第三方庫可以取代默認的行爲。如果您使用的是豐富的組件庫,這是值得檢查文檔。)

0

你可以嘗試在部署您的應用程序非羣集玻璃魚,或在tomcat中,看看你是否得到相同的情況。然後,您會知道問題是您的應用程序還是應用程序服務器或羣集的配置。

+0

完整的應用程序,包括加密/解密模塊在獨立服務器上正常工作。 也許它與集羣中的安全設置有關。 我希望是否有人能指出,覆蓋或禁用McDowell(上文)所談論的加密。 – 2009-08-29 09:52:03

+0

至少你知道這可能不是你的應用程序的問題。恐怕我不能爲你提供更多的幫助,儘管如此,我並沒有在集羣方面做很多工作。 – digitaljoel 2009-08-30 02:44:28

+0

謝謝joel。如果我們能夠解決這個問題,將會保持這個線程 – 2009-08-31 09:22:17

相關問題