在REST Web服务中维护会话

时间:2012-02-17 04:25:02

标签: rest cxf

我有一个COTS应用程序(PLM应用程序),它提供了很少的SOAP API来访问。由于这个SOAP API非常复杂,我们正在开发一个易于使用的REST包装器服务。在我的COTS应用程序中调用任何API之前,需要调用身份验证API。在我的REST包装器Web服务中,我有一个调用COTS SOAP登录API的登录资源。为了简化API用户的操作,我将登录的用户详细信息存储在用户会话中。在每个其他REST resoruces中,我检索会话并检查会话是否具有用户详细信息。如果是,我继续并调用SOAP API。如果没有,我会返回正确的HTTP状态代码。我使用Apache CXF服务和客户端。我强制我的API用户在这样的客户端维护会话

WebClient.getConfig(客户端).getRequestContext()。把(Message.MAINTAIN_SESSION,                 Boolean.TRUE);

在每个REST教程中,它都说REST是无状态的。根据REST标准,我怀疑我所做的是否正确。请建议。感谢

2 个答案:

答案 0 :(得分:0)

基本上,REST的概念是无状态接口。然而,通常的做法是对API调用使用某种身份验证,因为大多数情况下并非所有资源都应该是公共的(例如,Twitter用户通过twitter API的时间线)

因此,如果您进行某种身份验证并在进一步请求上验证会话(或者可能对每个请求进行身份验证,例如使用 HTTP基本访问身份验证)以确定是否应该访问理所当然的。

不是这个的一部分,并不是RESTful API的想法是存储复杂的会话信息,这将真正使整个事情有状态。例如,这包括存储较旧的处理请求以及稍后的处理请求。

答案 1 :(得分:0)

client.getRequestContext().put(Message.MAINTAIN_SESSION, Boolean.TRUE)

此代码仅导致cookie在该特定客户端中维护。 如果您希望这些cookie在另一个客户端可用,则需要对其进行编程。 如果第二个客户端收到额外的cookie并且您希望第一个客户端也可以使用这些cookie,那怎么可能呢?

我需要像root客户端那样维护所有子客户端的cookie。所有客户都必须共享所有cookie。就像所有客户的共享cookie存储库一样。有谁知道如何实现这个目标?

相关问题