使用 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(阅读本文以了解“会话”的实际含义)
我的第一个 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(阅读本文以了解“会话”的实际含义)