使用jquery在ajax xmlhttprequest上重用jsessionId

use*_*465 6 ajax rest session jquery xmlhttprequest

如何编写jquery ajax()调用(例如xmlhttprequest)来保存会话ID(例如,在浏览器的cookie中发送'jsessionID'cookie)

我们的背景:

  • 两个基于Java的Web应用程序
  • SSO机制将用户记录到两个应用程序中(即,具有应用程序A的会话101和具有应用程序B的会话202)
  • 应用程序"A"使用javascript(jquery)对应用程序B进行休息调用
  • 应用程序B在Java jersey(fwiw)中实现了rest API
  • 从应用程序A到B的所有GET和"老派形式POSTS"连接到"会话B"上的相同会话#202
  • XmlHttpRequests(例如jquery'ajax()'调用)不重用会话#202.每个XmlHttpRequest都会获得一个新会话

为什么选择新会议?

原因是:XmlHttpRequest不会将任何cookie传递给应用程序B. Servlet容器在cookie中设置jsessionid.服务器没有获得jsessionid

相反,JSONP调用(动态生成<script src ="http://server/b/page.x">)传递cookie.

问题

  • 获取ajax xmlhttprequest调用以将会话ID(cookie)传递给目标应用程序的最简单方法是什么?
  • 关于ajax,cookie,xmlhttprequest和REST的任何好的引用?
  • 任何人都可以推荐阅读REST API设计和身份验证吗?

Web会话,状态和身份验证

我知道REST应该是无状态的,重新使用Web会话似乎有些脆弱(即与使用OAuth和身份验证令牌相反,netflix也是如此)

这是第一次迭代,我们接近让事情"正常运行".这适用于JSONP,但XmlHttpRequest发布失败.

提前致谢

更新:

确实是一个天真的问题.

事实证明,通过xmlhttprequest/ajax进行跨站点发布具有固有的安全问题和解决方法.例如,Firefox除非添加特殊标头,否则不会使用XmlHttpRequest传递cookie.然后,Firefox将对服务器进行"飞行前检查"(即http OPTIONS调用)以查看"这样可以吗?".您的服务器需要回答"OPTIONS"调用,说"是的没关系",之后firefox将执行您的"使用Cookie发布".

IE和Firefox以不同的方式解决这些问题(即有点像javascript大约1998年).我不知道IE会做什么,但是经历了1998年,我们不想真的走这条路,如果可能的话.

我们编写了一个解决方法.

当我们开始编码时,我们的团队都不知道这一点.(即"jsonp在原型中工作得很好;其他一切也应该")

参考资料:Mozilla如何解决此问题(http标头和预检检查) https://developer.mozilla.org/En/HTTP_access_control

跨源资源共享:http: //en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing

jon*_*ung 1

您还可以通过部署有状态代理来解决此问题。它们必须安装在这两个应用程序上。然后,您可以通过代理进行所有基于会话的调用,并将远程会话数据存储到本地代理的会话中。