Мне нужен абсолютный 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.
Спасибо за помощь.