我们在 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) 截断。查看日志文件以获取完整的堆栈跟踪
任何有价值的见解将不胜感激。提前致谢。