Шифрование значений, отправляемых клиенту (скрытые поля формы и т. Д.), Является одной из функций Stripes и является причиной проблемы.
Для шифрования и дешифрования значений Stripes использует ключ, которыйуказывается в свойстве конфигурации с именем Stripes.EncryptionKey.Это свойство не имеет значения по умолчанию, поэтому, если оно не указано, Stripes будет генерировать случайный ключ при каждой инициализации приложения.
Это не должно быть проблемой на традиционном сервере приложений, более того, это можно приветствовать.улучшение, потому что ключ время от времени меняется.
С другой стороны, в Google App Engine это серьезная проблема.В GAE нет гарантии, что последующие запросы в рамках одного сеанса пользователя будут обслуживаться одним и тем же приложением с тем же сгенерированным ключом.App Engine может решить отключить любой из запущенных экземпляров приложения в любое время, и, если поступит следующий запрос, он запустит другой экземпляр для обслуживания запроса (это называется «холодный запуск»).Этот новый экземпляр будет иметь новый сгенерированный ключ.В результате приложение будет пытаться расшифровать значения с ключом, отличным от того, которым они были зашифрованы, и, конечно, не сможет это сделать.
В этой ситуации Stripes регистрирует предупреждение «Вход не был зашифрован с использованием текущего шифрованияkey: "и действует как параметр, который он пытается расшифровать, вообще отсутствует (см. net.sourceforge.stripes.util.CryptoUtil ).В вашем случае это означает, что он ведет себя как параметр _sourcePage, и поэтому он показывает экран «Вот как это происходит», если возникает ошибка проверки.
Так что если вы используете Stripes в Google App Engine,Вы должны установить случайное значение для свойства конфигурации Stripes.EncryptionKey.