2014-09-02 161 views
1

Worklight文档refers to an attribute位于适配器XML文件的元素connectAs="endUser"中。它表示这意味着:connectAs =“endUser”究竟干什么?

到后端的连接是使用用户的身份创建的。 仅在用于此过程的安全测试 中标识了用户领域时才有效。

但是,这对于从适配器到后端HTTP服务器执行的HTTP连接而言意味着什么?它如何影响,例如,JSESSIONID?

回答

5

编辑:继我原来的职位,安东·亚历山德罗夫提供了一个博客文章对这一机制如何工作的更多细节: https://www.ibm.com/developerworks/community/blogs/worklight/entry/configuring_http_adapters_for_stateless_stateful_backend_connectivity_and_user_identity_propagation?lang=en


什么这实际上意味着,工作灯服务器的行为就好像它是“最终用户”(特别是网页浏览器)一样。

在给定的Worklight适配器中,connectAs =“endUser”参数将导致HTTP Set-Cookie标头存储为经过验证的Worklight会话的一部分。随后请求connectAs =“endUser”的请求将发送作为该“endUser”服务器端会话的一部分存储的任何cookie。

Worklight文档特别声明,它只在领域中有效,因为如果没有领域,就不可能保存这些cookie供以后在服务器端会话中使用。

如果您选择使用此参数,则Worklight客户端应用程序视角的效果不应改变。

Worklight服务器到后端HTTP服务将改变。本质上,后端服务器会将使用connectAs =“endUser”的Worklight适配器视为单个HTTP Web浏览器。所以对于JSESSIONID的例子:

  1. 你启动的程序“登录”首次指定connectAs =“终端用户”。此过程还具有相关的安全测试,该测试强制用户登录到某个领域(无论采用什么方式或匿名 - 只要Worklight具有用于将cookie连接到cookie的用户会话,则无关紧要)
  2. 当此请求到达通过JSESSIONID跟踪会话的基于Java的服务器,它会检测到这是首次请求。它将处理该请求,并发送HTTP响应,以及HTTP正文中所需的任何内容。在HTTP标题中,将会有一个包含JSESSIONID的Set-Cookie响应。
  3. 凭借包含connectAs =“endUser”的Worklight过程,Worklight服务器将处理这些Set-Cookie标题,并将它们与用户对Worklight领域授权的会话一起存储(这就是为什么您需要具有被记录在该领域工作)
  4. 在随后的请求,过程“mySecondServerProcedure”,其中也有connectAs =“终端用户”和指定的同一领域,工作灯服务器将自动提供所存储的除了在适配器的requestHttp()调用中作为参数添加的任何cookie外,您还可以在传出HTTP请求上向服务器发送Cookie。在这个例子中,将提供被设置为“登录”一部分的JSESSIONID。
  5. 如果你再拍请求的程序“myThirdServerProcedure”,做已经connectAs =“最终用户”设置,任何Cookie将提供对即将离任的HTTP响应的服务器,你不手动提供的部分您的适配器中的requestHttp()调用中的“Cookies”参数。

重要注意事项:

  • 用户必须为此工作,使工作灯可与会话
  • 会话cookie存储在HTTP Cookie以先登录才有效在发出初始请求的适配器内;如果在将上面的JSESSIONID设置为“login”的一部分后,从另一个适配器运行connectAs =“endUser”请求,则此请求不会将JSESSIONID cookie自动附加到传出请求。
  • 如果您注销经过身份验证的Worklight用户会话,则对这些Cookie的所有引用都将消失。

我的经验一般规则如下:

  • 如果你正在做一些非常简单的身份验证,需要在后端服务器上的cookies保持一致,使用终端用户
  • 如果”重做一些更复杂的事情,或者可能要求服务器发送的cookie可以从多个适配器中使用,找到另一种存储cookie的方式。我喜欢的模式是提供一个包装器方法,它使传出的HTTP请求和处理响应中返回的头部以存储必要的“全局”属性。在Worklight世界中,这可以作为Worklight用户会话对象的一部分,也可以调用到基础Java或数据库存储实现。