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

Implications of saving session on the client with 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>

您可以使用 this page 生成 Base64 格式的随机 AES 密钥。

另请参阅:

  • javax.faces.application.ViewExpiredException: View could not be restored
  • How do servlets work? Instantiation, sessions, shared variables and multithreading(阅读本文以了解“会话”的实际含义)