2

我们在 JSF 1.2(Sun 的 RI)中开发的 Web 应用程序部署在带有 JRockit 1.6 64 位的 Weblogic 11g 中。我们有我们的视图状态保存模式作为客户端。该应用程序通过 HTTPS 访问。

作为第 3 方渗透测试建议的一部分,我们被建议加密视图状态,这是使用 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>
    </env-entry>

当应用程序部署到我们的生产箱(与会话亲和性集群)时,有时在处理客户端请求时(当然不是当应用程序页面加载到客户端浏览器中时,默认视图状态将作为隐藏字段的一部分发送) ,我们得到 GZIP 错误“ java.io.IOException: Not in GZIP format ”。仅当启用加密时才会发生这种情况。

    Servlet 因 IOException 而失败
    java.io.IOException:不是 GZIP 格式
    在 java.util.zip.GZIPInputStream.readHeader(GZIPInputStream.java:143)
    在 java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:58)
    在 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.compressViewStatetrue当我们在客户端设置视图状态时,JSF 框架会尝试使用 GZIP 格式对其进行压缩。如果将com.sun.faces.compressViewStateinit 参数设置web.xmlfalse,则不会发生压缩,您可以避免此异常。试一下。

于 2012-10-05T06:43:29.967 回答