使用Mojarra在JSF 1.2中配置JSF视图状态加密



我正试图弄清楚如何使用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" />

你会注意到这两者之间的两个区别:

  1. 第一个具有autocomplete="off">
  2. 第一个具有加密的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_AVING_METHOD.

所以,我的问题是:

  1. 为什么本地主机和服务器之间的配置不同?除了web.xml之外,还有其他地方可以指定选项吗
  2. 如何在我们所有的服务器上启用viewState加密(就像在本地主机上一样(

配置:

  • Jboss 5.1.0.GA
  • Mojarra 1.2_12-b01-FCS
  • 2.2.0.GA接缝

视图状态隐藏字段中的autocomplete="off"是根据第1129期在Mojarra 1.2_13中引入的。不同视图状态ID算法(对CSRF攻击不太敏感(是在Mojarra 1.2_14中引入的(我找不到相应的问题报告,我只知道它是第一次为JSF 2.0指定的,后来后移植到Mojarra1.2(

考虑到这些症状,您的测试环境看起来实际上至少运行Mojarra 1.2_14。调整您的JSF版本。Mojarra 1.2目前已经是1.2_16。请注意,JBoss默认附带Mojarra。

最新更新