Последствия сохранения сеанса на клиенте с помощью 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>
Но я обеспокоен последствиями безопасности.
1 ответ
Это не сохраняет "сессию" на стороне клиента вообще.
Это только сохраняет состояние просмотра 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>
Вы можете использовать эту страницу для генерации случайного ключа AES в формате Base64.
Смотрите также:
- javax.faces.application.ViewExpiredException: представление не может быть восстановлено
- com.sun.faces.ClientStateSavingPassword - рекомендации для реального пароля?
- Как работают сервлеты? Инстанциация, сессии, общие переменные и многопоточность (прочитайте это, чтобы узнать, что такое "сессия" на самом деле)