Gwt REST服务应用程序中的会话管理

Gwt REST服务应用程序中的会话管理,gwt,rest,jersey,Gwt,Rest,Jersey,在浏览了很多来自不同人士的关于Rest支持应用程序会话管理的评论之后,下面是我的想法 我的应用程序也可以通过浏览器(作为普通的web应用程序)和移动设备访问。应用程序最初是使用服务器中的http会话管理为基于浏览器的应用程序编写的。现在,在获得移动客户端的同时,我们已经实现了RESTWeb服务,移动设备和浏览器客户端的服务层也相同 当用户使用移动设备登录时,我们将创建一个唯一的身份验证令牌,生成一个http会话,并将该令牌ID作为密钥、值映射存储在应用程序中。稍后,我们希望来自移动设备的每个用户

在浏览了很多来自不同人士的关于Rest支持应用程序会话管理的评论之后,下面是我的想法

我的应用程序也可以通过浏览器(作为普通的web应用程序)和移动设备访问。应用程序最初是使用服务器中的http会话管理为基于浏览器的应用程序编写的。现在,在获得移动客户端的同时,我们已经实现了RESTWeb服务,移动设备和浏览器客户端的服务层也相同

当用户使用移动设备登录时,我们将创建一个唯一的身份验证令牌,生成一个http会话,并将该令牌ID作为密钥、值映射存储在应用程序中。稍后,我们希望来自移动设备的每个用户请求都返回该令牌,并使用该令牌从map获取会话并继续

有人能回顾一下我的方法并确认它是否合适吗


现在,我有第二个问题——我们正在使用GWT中的JsonPRequestBuilder使用jersey guice调用我的后端REST服务。在来自GWT的jsonp调用期间,如何在http头中发送此令牌

第二点:使用JSONP,您必须将令牌添加为普通http参数,在使用常规XMLHttpRequest时,您无法访问类似对象的请求。因此,您不能设置任何类型的标题,所有内容都应该放在查询字符串中。

“REST中的会话”是一个矛盾修饰法

当用户使用移动设备登录时,我们正在创建唯一的身份验证令牌

看起来不错,不过看起来有点像你重新发明了OAuth

生成一个http会话,我们将此令牌ID作为键、值映射存储在应用程序中的http会话

在服务器端保留一些缓存以便更快地访问是可以的,但不要将其称为会话,也不要将其绑定到特定的令牌(如果数据是特定于用户的,则可以将其绑定到用户;如果有意义,则用户ID只是缓存密钥的一部分)

您不会谈论缓存的过期,也不会谈论如何/何时清理缓存并释放内存

现在,我有第二个问题——我们正在使用GWT中的JsonPRequestBuilder使用jersey guice调用我的后端REST服务。在来自GWT的jsonp调用期间,如何在http头中发送此令牌

正如@Arcadien所说,JSONP只是在页面中插入一个
元素,因此您只能控制URL,因此这是您应该/可以传递身份验证令牌的地方(尽管不是真正安全的)。

我可以问一下您为什么使用移动“本机”应用程序中的JSONP吗?如果UIWebView或类似版本没有SOP问题,那么
RequestBuilder
XMLHttprequest
就可以了™.

我们正在为桌面版和移动版客户端编写应用程序。后端服务很常见。由于请求来自不同的域,我选择了JSONP而不是RequestBuilder。对服务发出的每个请求都必须包含执行请求所需的所有数据。如果服务器向客户端提供令牌,则服务器将丢失该令牌的密钥/值映射(例如,服务停止并重新启动),该令牌及其以前的状态可能无效。这并不是说你不能按你的要求去做。我只是觉得你不能称之为宁静。