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

时间:2012-07-03 05:33:52

标签: gwt rest jersey

在经历了很多关于Rest支持的应用程序的会话管理的不同人的评论之后,我在这里想到了。

我的应用程序可以从浏览器(作为普通的Web应用程序)和移动设备访问。应用程序首先在服务器中使用http会话管理编写,用于基于浏览器的应用程序。现在,在获得Mobile客户端的同时,我们已经实现了Rest Web服务,同时为移动设备和浏览器客户端提供了相同的服务层。

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

有人可以检查我的方法并确认它是否正常?

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

2 个答案:

答案 0 :(得分:2)

“REST中的会话”是矛盾的。

  

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

看起来很好,虽然看起来有点像你重新发明了OAuth。

  

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

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

您不会谈论该缓存的过期,或者您清理和释放内存的方式/时间。

  

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

正如@Arcadien所说,JSONP只是在页面中插入<script>元素,因此您只能控制URL,因此这是您应该/可以传递身份验证令牌的地方(尽管不是真的很安全。) 我可以质疑你从移动“原生”应用程序使用JSONP的原因吗? AFAIK没有来自UIWebViews或类似的SOP问题,因此RequestBuilderXMLHttprequest将Just Work™。

答案 1 :(得分:0)

对于第二种:使用JSONP,您必须将您的令牌添加为普通的http参数,在使用常规XMLHttpRequest时,您无法访问像Request这样的对象。所以你不能设置任何类型的标题,一切都应该放在查询字符串中。