使用javax.faces.STATE_saving_METHOD在客户端上保存会话的含义



我的第一个JSF页面是抛出javax.faces.application.ViewExpiredException。当我搜索时,我得到了这个解决方案,它解决了我的问题。

<context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
</context-param>

但我担心这会带来安全隐患。

这不会保存"会话";在客户端。

这只会在客户端保存JSF视图状态。这是在JSF 2.2中,始终使用在应用程序启动时生成的密钥进行AES加密。但是,一旦重新启动应用程序,这将使其无效,从而导致所有现有视图状态变为无效。您可以在web.xml中指定如下固定密钥,以便所有现有视图状态在服务器重新启动时保持有效:

<env-entry>
    <env-entry-name>jsf/ClientSideSecretKey</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value>[AES key in Base64 format]</env-entry-value>
</env-entry>

您可以使用此页面生成Base64格式的随机AES密钥。

另请参阅:

  • javax.faces.application.ViewExpiredException:无法还原视图
  • com.sun.faces.ClientStateSavingPassword-实际密码的建议
  • servlet是如何工作的?实例化、会话、共享变量和多线程(阅读本文了解"会话"的实际含义)

最新更新