Я пытаюсь создать приложение с несколькими арендаторами, используя Play Framework 2.2, и столкнулся с проблемой. Я хочу установить ключ сеанса в глобальном onRouteRequest
(или onRequest
на Java), который идентифицирует идентификатор сайта для домена, который запрашивает пользователь. В буквальном смысле десятки других фреймворков этот тип вещей безболезнен (например, Django), но я узнаю, что объект сеанса в Play, по-видимому, неизменен.Play Framework Multi-Tenant Filter
Итак, прямо сейчас, у меня есть что-то вроде этого:
override def onRouteRequest(request: RequestHeader): Option[Handler] = {
if (request.session.get("site").isEmpty){
val id = models.Site.getSiteUIDFromURL(request.host.toLowerCase()).toString()
if (!id.isEmpty){
//what goes here to set the session?
}else{
//not found - redirect to a general notFound page
}
}
super.onRouteRequest(request)
}
И, хотя это не самый эффективный способ использования поиска в базе данных, он работает для тестирования прямо сейчас. Мне нужно установить ключ сеанса в глобальном, но я полностью потерял его, как это сделать. Если есть какие-то лучшие методы, я все уши (возможно, обертываю мои контроллеры?).
Я открыт для примеров решений в Java или Scala.
Это замечательно, спасибо. Я попробую. До сих пор я просто закрывал свои контроллеры, используя композицию действий, которая устанавливает значение сеанса. Фильтры кажутся очень мощными - я просто хочу, чтобы на нем было больше документации. Еще раз спасибо. –