如何在Rational / WebSphere工具中获取传递给JAX-WS服务客户端的登录凭据及其关联的策略集和绑定

时间:2010-09-23 19:59:52

标签: java-ee jax-ws ws-security websphere-7

我专门使用WebSphere Integration Developer V7,但我也可以使用Rational Software Architect V 7.5.1(因为我有两者)。

上下文:我正在尝试创建一个JAX-WS客户端来调用WebSphere Process Server V7中的人工任务管理器和业务流程管理器服务,这些服务通过JAX-WS公开。默认情况下,它们附加了策略集和指定某些WS-Security设置的提供程序绑定(因为这些设置未在WSDL中定义)。

我已经找到了如何使用动态Web项目使其工作。我已经能够从WSDL生成JAX-WS客户端代码。我已经能够从Process Server导出策略集和提供者和客户端绑定,并将它们导入我的工作区。我已经能够将策略集和客户端绑定附加到客户端服务。我已经能够设置一个页面和一个servlet来调用我的Web服务(以测试客户端)。我已经能够在部署描述符和websphere绑定/扩展文件中设置安全设置,以使其工作。

这一切都很精彩,但实际上我们不希望只是为了将Web服务客户端暴露给我们正在编写的其他应用程序。我们想要生成一个Web服务客户端jar并将其与其他应用程序打包在一起。

鉴于这种思路,我已经能够弄清楚如何在我的IDE中使用常规Java项目并在其中生成Web服务客户端。我还能够将策略集和客户端绑定附加到客户端。

我的问题现在是如何调用此方法的?我像以前一样用我的页面和servlet创建了一个动态Web项目来测试我的客户端。我将我的客户端项目设置为Web库依赖项,以便它可以访问客户端代码。我甚至可以像以前一样设置部署描述符来强制登录和身份验证。现在唯一的问题是我无法弄清楚如何将凭据传递给我的Web服务,因为它在自己的“jar”中。在我访问菜单以设置TokenGenerator和CallbackHandler之前。现在,由于客户端不在动态Web项目中,因此我无法访问这些菜单。所以现在我有一个“断开连接”,当然试图在服务器上运行它时它会失败。

必须有办法做到这一点。我应该能够生成一个客户端jar并将其传递给它所需要的东西。以前有人遇到过这个吗?

1 个答案:

答案 0 :(得分:4)

确定。我花了很长时间研究这个,阅读红皮书和开发者文章,然后把头撞到我的键盘上,我终于到了某个地方。不是所有的方式,但差不多。 (希望一些IBM的东西更容易找到......但是你可以使用你所得到的东西。而且公平地说,我读过的东西是有意义的并且相当强大。)

无论如何,这是Rational和WebSphere工具的技巧:您必须首先创建一个空的Java项目。这是制作可移植Web服务客户端的关键之一。

所以到目前为止:

  1. 在IDE中创建一个空Java项目。我更喜欢在Rational Application Developer / Software Architect或WebSphere Integration Developer中使用Java EE透视图。
  2. 将WSDL(s)和架构导入IDE中的另一个空通用项目,而不是导入新创建的Java项目。
  3. 右键单击主WSDL并选择生成Web服务客户端。
  4. 此处的另一个关键:确保在出现的向导中,您将客户端项目更改为您在第一步中创建的Java项目。默认情况下,向导将尝试定位新的或现有的动态Web项目,这不是您想要的。
  5. 确保选择JAX-WS作为您的实现。确保选择希望客户端“可移植”,并确保告诉向导将WSDL包含在Java Project客户端中。
  6. 等待您完成所有操作(并且您的本地服务器正在运行),Rational / WebSphere工具现在应该在Java项目中生成JAX-WS Web服务客户端。
  7. 奇妙!大!现在你有了一个Java Project(aka jar),你可以使用它来使它可移植。但是,如何让IBM工具满意并将安全策略附加到客户端?

    首先,我了解到最好将安全策略附加到WebSphere Application Server / Enterprise Service Bus / Process Server的管理控制台中。尽管IBM为您提供了API,但有许多事情需要考虑安全性以尝试手动编写所有代码。相信我。更容易在服务器上定义安全性,然后将其分配给客户端。

    无论如何....为了让客户端对管理控制台可见,以便为JAX-WS安全性附加策略集和客户端绑定,它必须处于“Web级别”(缺少更好的)术语)以便将jar视为Web客户端。这意味着将jar作为J2EE Utility Jar附加到EAR项目将不起作用。 EAR不是“网络级别”,而是“应用级别”。因此,要执行此操作,您需要在J2EE Module Dependencies屏幕中将Java Project与EAR相关联,而不是作为Utility Jar。而是选中“lib”框。这意味着它可以显示/挂载到动态Web项目/战争的lib目录中(您还必须这样做)。令人惊讶的是,管理控制台现在将您的客户端jar视为真正的JAX-WS Web服务客户端!现在,您可以将策略集和客户端绑定关联到它,以满足您的安全需求!

    这一开始可能看起来很奇怪,但它确实有道理。毕竟,您正在处理 web 服务并且您正在使用 Web协议,因此在某些方面将客户端置于“ Web级别< / em>“你的申请。

      

    编辑:我搞砸了安全政策,我发现了这一点   this developer works article给了我最多的帮助。特别付款   注意清单2 ClientTest.java 。可悲的是,你必须这样做   将所有安全性编码到您的客户端,以使其工作最干净。   然后这是另一个问题。 IBM将允许您创建用户名   来自在WebSphere之外运行的客户端的令牌,但他们不会   允许您在WebSphere之外创建LTPA令牌。所以要测试那些   各种令牌,您必须在本地打包和部署您的客户端   测试一切。