Каков наилучший способ перенаправить пользователя на мобильный сайт на основе устройства с помощью пользовательского обработчика перехватчика в Spring - PullRequest
1 голос
/ 09 декабря 2011

Сейчас мы работаем над проектом, который будет иметь настольную и мобильную версию сайта, созданную в Spring. Мы хотим, чтобы мобильная и настольная версии имели одинаковую систему безопасности Spring и т. Д.

Мы используем Spring mobile для определения того, мобильное устройство или нет, и, возможно, можем использовать параметр предпочтения сайта Spring.

Мы не хотим использовать весенний мобильный перенаправитель, так как он, кажется, перенаправляет на другой домен (например, m.website.com) и не будет легко использовать ту же самую весеннюю защиту.

Так что я думаю, что с помощью HandlerInterceptor можно перенаправить в конкретный каталог на сайте - например, "/jsp/mobile/".

1) Возможно ли в этом расширенном HandlerInterceptor использовать детектор устройств Spring Mobile в методе preHandle?

2) Как лучше всего перенаправить? Это а) просто использовать http-ответ или б) как-то изменить viewResolver и изменить префикс с "/ jsp /" на "/ jsp / mobile /"

Извините за длинный вопрос, но я надеялся добавить как можно больше информации о том, что мы пытаемся сделать!

Приветствия

Ответы [ 2 ]

1 голос
/ 22 декабря 2011

Спасибо за ответ.Я использовал HandlerInterceptor и изменил имя представления в методе дескриптора поста следующим образом:

if (modelAndView.getViewName() != null)
{
    modelAndView.setViewName("/mobile/" + modelAndView.getViewName());
}
else
{
    modelAndView.setViewName("/mobile/");
}

Плюс, который обернут в if else, независимо от того, мобильное устройство или нет, введя DeviceResolver вконструктор, а затем разрешить локальное устройство.

1 голос
/ 19 декабря 2011

В настоящее время я использую HandlerInterceptor в методе pre handler, чтобы оценить, является ли приложение мобильным устройством, если оно поступает с мобильного устройства, с помощью метода requestUri получить текущий адрес и поместить в качестве префикса «m» после имя контекста приложения. Затем выполните перенаправление:

response.sendRedirect ("/ application / m / .....") ( документация )

Пример

/application/user           //recived
/application/m/user         //sent

Проблема в том, что этот перехватчик перехватывает все запросы, поэтому необходимо оценить следующее:

  1. если запрос приходит с путем типа "/ application / m / .....", не проверять, что исходит от мобильного устройства, потому что "m" и говорит, что это делает меня

  2. если вы разрешите Spring обрабатывать статические ресурсы, перехватчик не должен перенаправлять, если запросы поступают с мобильного устройства (мобильная версия и обычный ресурс разделяют эти ресурсы)

...