当前位置: 首页 > 面试题库 >

JAX-WS客户端:跨多个服务维护会话/ cookie

桓兴腾
2023-03-14
问题内容

我正在使用Netbeans根据WSDL文件自动创建Web服务客户端。这很好用,除了我使用的Web服务要求我将HTTP标头中的自定义cookie传递给每个Web服务以证明我的身份。

我使用一个名为的Web服务Utility来获得我的授权。这将设置一个cookie,在对任何Web服务的所有后续调用中都需要提供该cookie。

这可以通过在Web服务的端口的BindingProvider上将设置javax.xml.ws.session.maintain为来完成true。这对于后续调用UtilityWeb服务中的方法非常有用。问题在于,这仅维护单个Web服务的会话/
cookie。我也需要其他人。

我需要将Cookie传递到名为“ 如何完成此操作” 的 单独的
Web服务中History?具有实用程序和历史记录都可以扩展并共享相同会话状态的超级服务类是否可行?


问题答案:

我找到了解决方案。

拨打电话后,可以使用以下方法获取响应头:

((BindingProvider)port).getResponseContext().get(MessageContext.HTTP_RESPONSE_HEADERS);

查找Set-Cookie标题并存储其值。

然后,在下一个请求(在任何Web服务中)之前,您可以设置Cookie标头:

((BindingProvider)port).getRequestContext().put(
            MessageContext.HTTP_REQUEST_HEADERS,
                Collections.singletonMap("Cookie", Collections.singletonList(cookieValue)
            )
        );


 类似资料:
  • 问题内容: 我尝试使用JAX-WS检索客户端IP,我曾经使用过: 我在要求中得到一个,mc不为空。 我的问题是,因为我使用的是Java独立应用程序,所以要使用哪个JAR ? 谢谢 问题答案: 如何获取jax-ws服务的Web服务客户端地址取决于您是否: 将Web服务作为servlet运行(在Java EE容器中),或者 将Web服务作为独立应用程序运行(Java SE 6或7)。 Servlet

  • 问题内容: 我已经使用JAXWS-RI 2.1为基于WSDL的Web服务创建了一个接口。我可以与Web服务进行交互,没有问题,但是无法指定将请求发送到Web服务的超时时间。如果由于某种原因它没有响应,则客户似乎永远旋转它的轮子。 到处搜寻表明我可能应该尝试执行以下操作: 我还发现,根据您拥有的JAXWS-RI版本,您可能需要设置以下属性: 我的问题是,无论以上哪一项是正确的,我都不知道 在哪里 可

  • 问题内容: 由于WS客户端服务和端口的初始化需要花费很多时间,因此我希望在启动时对其进行一次初始化,并重用端口的同一实例。初始化看起来像这样: 我班上某处的电话: 我的问题:此调用是否是线程安全的? 问题答案: 根据CXF常见问题解答: JAX-WS客户端代理线程安全吗? 官方JAX-WS答案: 否。根据JAX- WS规范,客户端代理不是线程安全的。要编写可移植的代码,您应该将它们视为非线程安全的

  • 问题内容: 我正在使用RMI编写密码系统的原型。 我有一个问题,因为当我启动两个客户端时,它们从OneTimePad类的服务器中的一个对象获得了响应。 因此客户端A获取为客户端b保留的密钥,由于特定的算法,这种情况不会发生。 服务器仅向客户端发送E和N变量(例如在RSA中),因此我无法序列化OneTimePad对象并通过网络发送它(因为它将具有所有密钥)。 如何为每个客户端创建OneTimePad

  • 我正在使用与Kie执行服务器集成的Drools workbench 7.17。我在workbench中创建了一个项目,该项目部署在kie执行服务器上。 我已经在项目的设置中配置了kie-base和kie-会话。将有状态的kie-会话定义为kieSession。我正在使用Kie ServerJavaClient API将事实插入引擎。 我能够在KieSession上进行查找。我将接收不同用户的数据,