Play! framework : в чем разница между Router.getFullUrl("action") и Router.reverse("action").absolute()?

Мне нужен абсолютный URL в моем приложении Play! 1.2.4 в качестве обратного вызова для аутентификации OAuth (используя Scribe.

Мое приложение работает за виртуальным прокси Apache, чтобы быть доступным через URL с поддоменом типа "http://myapp.mydomain.com", проксируя "http://127.0.0.1:9000". ProxyPreserveHost установлен в On. В конфигурации приложения Play! у меня есть следующее свойство: application.baseUrl=http://myapp.mydomain.com/.

Чтобы вычислить этот абсолютный URL, я использовал такой код:

Router.ActionDefinition ad = Router.reverse("Controller.callback");
ad.absolute();
return ad.url;

Этот код отлично работал с Play! 1.2.3: он возвращал "http://myapp.mydomain.com/callback".

Теперь, когда я использую Play! 1.2.4, этот код теперь возвращает "http://www.mydomain.com:9000/callback" (переведенный URL виртуальным прокси без субдомена), как будто Play! теперь использует URL HTTP запроса для построения этого абсолютного URL.

Я эмпирически заменил этот код на Router.getFullUrl("Controller.callback"), что решило мою проблему.

Эти два метода Router.getFullUrl() и Router.absolute() не документированы (бу!), и я хотел узнать тонкие различия, чтобы понять мою проблему. Я предполагаю, что Router.absolute() использует текущий HTTP запрос для построения абсолютного URL, а Router.getFullUrl() использует свойство конфигурации application.baseUrl. Возможно, у меня проблемы с конфигурацией Apache (поскольку это явно не мой навык!), но с ProxyPreserveHost, установленным в On, я предполагал, что мой виртуальный прокси будет прозрачен для приложения Play!, и я не понимаю, почему он появляется при переходе с Play! 1.2.3 на 1.2.4.

Спасибо за помощь.

5
задан Cyril Lacôte 12 January 2012 в 01:44
поделиться