Инициализатор географического местоположения Grails

Мы разрабатываем наш проект в Grails. И мы хотим показывать данные пользователю в зависимости от страны, из которой он заходит на наш сайт. У меня есть поле, где я храню местоположение страны. С помощью плагина geoip Grails.

Мой вопрос заключается в том, можем ли мы инициализировать сеанс с названием страны, из которой сайт перегружен, прежде чем он попадет в какой-либо контроллер/действие, скажем, в какой-то файл конфигурации или где-то еще.


person lucky    schedule 16.11.2011    source источник


Ответы (1)


Это можно сделать с помощью фильтра. . Что-то вроде этого, помещенного в grails-app/conf как GeoFilters.groovy:

class GeoFilters {
  def geoIpService

  def filters = {
    countryCheck(controller:'*', action:'*') {
      before = {
        if( !session.geolocation ) {
          session.geolocation = geoIpService.getLocation( request.remoteAddr )
        }
      }
    }
  }
}

Должен (хотя я не пробовал) проверить, существует ли geolocation в сеансе, и если нет, он должен получить его из geoIpService.

person tim_yates    schedule 16.11.2011
comment
Привет, Тим, спасибо за быстрый ответ :) Я думаю, этот фильтр будет инициализировать сеанс с IP-адресом сервера, на котором будет развернута война. Будет ли он повторно инициализировать сеанс в соответствии с пользователем, который собирается получить доступ к нашему сайту? - person lucky; 16.11.2011
comment
@lucky Phillipe прав, request.remoteAddr - это IP-адрес клиента как String... - person tim_yates; 16.11.2011
comment
Я думал, что эти фильтры будут выполняться, когда кто-то новый зайдет на наш сайт. - person lucky; 16.11.2011
comment
@lucky, почему бы вам сначала не протестировать его на главном сервере, а не на локальном. - person Wasim; 16.11.2011
comment
@lucky, этот фильтр должен выполняться каждый раз, когда кто-либо обращается к действию Grails. Может быть, описание проблемы, с которой вы столкнулись, было бы полезно для тех, кто пытается помочь? - person tim_yates; 16.11.2011
comment
@tim это действительно сработало, этот фильтр должен выполняться каждый раз, когда кто-либо обращается к действию Grails. и спасибо за решение. Каждый раз, когда новый пользователь заходит на веб-сайт, создается сеанс в соответствии с его местоположением. :) - person lucky; 20.12.2011