Полосы на проблеме Google App Engine - PullRequest
2 голосов
/ 15 октября 2011

У меня проблема с формами Stripes в приложении для Google App Engine. У меня есть страница JSP с тегом формы Stripes. Когда я отправляю форму и возникает ошибка проверки в одном из полей, Stripes показывает мне экран со следующим уведомлением:

Вот как это.

Кто-то (вполне возможно, Диспетчер полос) должен был получить разрешение исходной страницы. Но исходная страница не была предоставлена ​​в запрос, и если вы не переопределите ActionBeanContext.getSourcePageResolution () вам это понадобится значение. При использовании тега скрытое поле с именем _sourcePage включен. Если вы пишете свои собственные формы или ссылки, которые могут генерировать ошибки проверки, вы должны включить значение для этого параметра. это можно сделать, вызвав request.getServletPath (). "

Я проверил источник страницы с формой и скрытое поле ввода _sourcePage присутствует в форме, как и должно быть. Значение поля вроде как-то зашифровано.

1 Ответ

5 голосов
/ 16 октября 2011

Шифрование значений, отправляемых клиенту (скрытые поля формы и т. Д.), Является одной из функций 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.

...