Почему декодирование Grails URL-параметров ведет себя по-разному на сервере и локально - PullRequest
2 голосов
/ 25 октября 2010

Допустим, у меня есть следующая запись в граале URLMappings.groovy:

"/actionName/param1"(controller:'myController', action:'myAction')

Когда я вызываю URL, где param1 включает + в качестве специального символа, URL-адрес кодируется правильно/actionName/my%2Bparam например, как в моей локальной, так и в моей серверной среде.

В моей локальной среде - также с использованием «prod» в качестве параметра среды - это правильно разрешено в контроллере до my+param.Однако в моей «реальной» производственной среде (экземпляр Amazon Web Service EC2) URL-адрес преобразуется в «мой параметр», что неверно.

Я понятия не имею, что может быть причиной этого.В обеих средах используется TomCat, и, как указано выше, я даже использую настройки среды prod в своей локальной среде, поэтому конфигурация между разработкой и производством не может быть разной.

Кто-нибудь знает, где я могукопать глубже, чтобы определить проблему?

Ответы [ 2 ]

3 голосов
/ 08 ноября 2010

Экземпляр EC2 запускает Apache перед Tomcat? Ранее у меня были проблемы с декодированием параметров дважды: сначала Apache, а затем снова Tomcat. По памяти, я думаю, что я скорректировал конфигурацию директивы ProxyPass в Apache, чтобы исправить это.

EDIT:

Я нашел следующие инструкции, которые я оставил с исходным кодом для моего приложения:)

Apache httpd.conf дополнения

AllowEncodedSlashes On 
ProxyTimeout 3600

Мы также обновили apache 2.2.12+, чтобы исправить ошибку переписывания HEAD> GET с помощью сценария оболочки запуска.

Я также добавил опцию 'nocanon' в директиву ProxyPass, чтобы остановить автоматическое декодирование с помощью mod_proxy в /etc/httpd/conf.d/cluster.conf

Я думаю, мне пришлось сделать это на сервере, поскольку вы не можете изменить это с помощью графического интерфейса. У меня также есть примечание, в котором говорится, что это вызывает кодирование строки запроса. Возможно, мне пришлось добавить дополнительный декодер в мое приложение, чтобы справиться с этим (извините, не помню точно!)

Параметры запуска Tomcat

-Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
-Dorg.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH=true

Я думаю, это должно было заставить кота правильно обрабатывать слэши

ура

Lee

1 голос
/ 25 октября 2010

Это известная ошибка , которая была представлена ​​в Groovy 1.3.4 или нескольких предыдущих версиях сборки.Это было исправлено в текущей версии 1.3.5.

это правильно разрешено для моего + параметра в контроллере

Нет, ожидаемое разрешение - "мой параметр"(с пробелом).
Поскольку это работает на хосте Amazon, вы бы обновили Grails до 1.3.5 локально.

...