2

JSF 1.2 (Sun の RI) で開発された Web アプリケーションは、JRockit 1.6 64 ビットを使用して Weblogic 11g にデプロイされています。View State 保存モードを Client にしています。アプリケーションは HTTPS 経由でアクセスされます。

サード パーティの侵入テストからの推奨事項の一部として、web.xml の JNDI ENV 設定を使用して実装されるビュー ステートを暗号化することが推奨されました。

    <環境エントリ>
    <env-entry-name>com.sun.faces.ClientStateSavingPassword</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value>2rEb7Tuf</env-entry-value>
    </環境エントリ>

アプリケーションが実稼働ボックス (セッション アフィニティでクラスター化されている) にデプロイされるとき、クライアント リクエストを処理している間 (アプリケーション ページがクライアント ブラウザーに読み込まれるときではなく、デフォルトのビュー ステートが非表示フィールドの一部として送信されます)。 、GZIP エラー「java.io.IOException: Not in GZIP format」が発生します。これは、暗号化が有効になっている場合にのみ発生します。

    サーブレットが IOException で失敗しました
    java.io.IOException: GZIP 形式ではありません
    java.util.zip.GZIPInputStream.readHeader (GZIPInputStream.java:143) で
    at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:58)
    at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:67)
    com.sun.faces.renderkit.ResponseStateManagerImpl.getTreeStructureToRestore(ResponseStateManagerImpl.java:166) で
    javax.faces.render.ResponseStateManager.getState(ResponseStateManager.java:215)で
    切り捨てられました。完全なスタック トレースについては、ログ ファイルを参照してください

貴重な洞察をいただければ幸いです。前もって感謝します。

4

1 に答える 1

2

デフォルトcom.sun.faces.compressViewStateではtrue、クライアント側でビューステートを設定しているときなので、JSF フレームワークは GZIP 形式を使用して圧縮しようとします。com.sun.faces.compressViewStateinit パラメータを に設定web.xmlするとfalse、圧縮は行われず、この例外を回避できます。試してみる。

于 2012-10-05T06:43:29.967 に答える