在Spring中使用自定义handlerinterceptor基于设备将用户重定向到移动站点的最佳方法是什么?

时间:2011-12-09 17:19:39

标签: spring mobile springsource

目前我们正在开发一个项目,该项目将在Spring中创建一个桌面和移动版网站。我们希望移动版和桌面版共享相同的Spring安全系统等。

我们使用Spring mobile来检测设备是否是移动设备,并且可能使用Spring网站首选项参数。

我们不想使用spring移动重定向器,因为它似乎会重定向到另一个域(例如m.website.com),并且不会轻易使用相同的spring安全性。

所以我认为使用HandlerInterceptor重定向到站点内的specfic目录 - 例如“/ jsp / mobile /".

1)在这个扩展的HandlerInterceptor中是否可以在preHandle方法中使用Spring Mobile设备检测器?

2)重定向的最佳方法是什么?是a)只使用http响应,或b)以某种方式更改viewResolver并将前缀从“/ jsp /”更改为“/ jsp / mobile /”

很抱歉这个冗长的问题,但我希望尽可能多地提供有关我们想要做的事情的信息!

干杯

2 个答案:

答案 0 :(得分:1)

我目前在预处理程序方法中使用HandlerInterceptor来评估应用程序是否是移动设备,如果来自移动设备,则通过方法requestUri获取当前地址并将地址作为前缀“m”之后应用程序上下文的名称。然后进行重定向:

response.sendRedirect(“/ application / m / .....”)(documentation

实施例

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

问题是这个拦截器拦截了所有请求,因此有必要评估以下内容:

  1. 如果请求附带的路径类似“/ application / m / .....”而不是来自移动设备的验证,因为“m”并说它是我

    < / LI>
  2. 如果让spring处理静态资源,如果请求来自移动设备(移动版本和普通用户共享这些资源),拦截器不得重定向

答案 1 :(得分:1)

感谢您的回答。我所做的是使用HandlerInterceptor并在post handle方法中更改视图名称,如下所示:

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

另外,通过将DeviceResolver注入构造函数然后解析本地设备,将其包含在if else中,无论设备是否可移动。