1

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

我们正在使用 Spring mobile 来检测设备是否是移动设备,并且可能使用 Spring 站点偏好参数。

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

所以我想使用 HandlerInterceptor 重定向到站点内的特定目录 - 例如“/jsp/mobile/”。

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

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

很抱歉这个冗长的问题,但我希望尽可能多地提供关于我们正在尝试做的事情的信息!

干杯

4

2 回答 2

1

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

response.sendRedirect("/application/m/.....") (文档)

例子

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

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

  1. 如果请求带有像“/application/m/.....”这样的路径,则不要验证来自移动设备,因为“m”并说它对我有用

  2. 如果你让spring处理静态资源,如果请求来自移动设备,拦截器一定不能重定向(移动版和普通版共享这些资源)

于 2011-12-19T04:41:34.033 回答
1

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

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

另外,通过将 DeviceResolver 注入构造函数然后解析本地设备,将其包装在 if else 中,再次判断设备是否移动。

于 2011-12-22T12:30:48.457 回答