目前我们正在开发一个项目,该项目将在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 /”
很抱歉这个冗长的问题,但我希望尽可能多地提供有关我们想要做的事情的信息!
干杯
答案 0 :(得分:1)
我目前在预处理程序方法中使用HandlerInterceptor来评估应用程序是否是移动设备,如果来自移动设备,则通过方法requestUri获取当前地址并将地址作为前缀“m”之后应用程序上下文的名称。然后进行重定向:
response.sendRedirect(“/ application / m / .....”)(documentation)
实施例
/application/user //recived
/application/m/user //sent
问题是这个拦截器拦截了所有请求,因此有必要评估以下内容:
如果请求附带的路径类似“/ application / m / .....”而不是来自移动设备的验证,因为“m”并说它是我
< / LI>如果让spring处理静态资源,如果请求来自移动设备(移动版本和普通用户共享这些资源),拦截器不得重定向
答案 1 :(得分:1)
感谢您的回答。我所做的是使用HandlerInterceptor并在post handle方法中更改视图名称,如下所示:
if (modelAndView.getViewName() != null)
{
modelAndView.setViewName("/mobile/" + modelAndView.getViewName());
}
else
{
modelAndView.setViewName("/mobile/");
}
另外,通过将DeviceResolver注入构造函数然后解析本地设备,将其包含在if else中,无论设备是否可移动。