我试图弄清楚如何使用 JSF 1.2 和 Mojarra 加密视图状态。奇怪的是,它似乎在某些服务器上默认加密,但在其他服务器上却没有。例如,在我的本地主机上,我看到以下内容:
<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="-40233784603124937:-3413182513789758151" autocomplete="off" />
但是在我们的测试环境服务器上,我得到:
<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id4:j_id5" />
您会注意到这两者之间的两个不同之处:
- 第一个有 autocomplete="off"
- 第一个加密了 viewState 值,而第二个没有
问题是我一生都无法弄清楚为什么两者不同。我的本地主机上的代码库与服务器上的代码库相同。我的 web.xml 中没有指定配置选项,所以我会假设我的 localhost 不会被加密(因为这是默认设置,对吗?)。
根据Mojarra 文档,我应该添加:
<env-entry>
<env-entry-name>com.sun.faces.ClientStateSavingPassword</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>[SOME VALUE]</env-entry-value>
</env-entry>
但这似乎专门用于客户端状态保存,而不是服务器端状态保存。除非我误解了事情,否则我正在使用服务器端状态保存(至少,我找不到我们配置 javax.faces.STATE_SAVING_METHOD 的任何地方。
所以,我的问题:
- 为什么我的配置在 localhost 和服务器之间会有所不同?除了 web.xml,还有其他选项可以指定吗?
- 如何在我们所有的服务器上启用 viewState 加密(比如在我的本地主机上)?
配置:
- Jboss 5.1.0.GA
- 莫哈拉 1.2_12-b01-FCS
- 接缝 2.2.0.GA