WEB开发网
开发学院软件开发Java Java Web 服务: WS-Security 的细粒度使用 阅读

Java Web 服务: WS-Security 的细粒度使用

 2009-11-05 00:00:00 来源:WEB开发网   
核心提示: 清单 1 中的策略和 WSDL 均来自早期文章,不过没有按照本文的方式事先合并,Java Web 服务: WS-Security 的细粒度使用(3),但是,您会发现策略中有一处显著的不同:早期的版本都包括了 Rampart 配置信息,您也需要对服务描述应用这些配置,清单 2 展示了用于本样例应用

清单 1 中的策略和 WSDL 均来自早期文章,不过没有按照本文的方式事先合并。但是,您会发现策略中有一处显著的不同:早期的版本都包括了 Rampart 配置信息,这些信息特定于客户机或服务器。现在策略被嵌入到 WSDL 中,因此不适合直接包含 Rampart 配置。(您需要编辑 WSDL 以包含客户机 Rampart 配置信息,并在每次发生更改时重新生成代码,而在服务器端,Rampart 配置将被公开给访问 WSDL 的任何人)。因此示例代码将单独设置配置信息。为此,对包含的 Rampart 配置使用了之前用于策略的相同技巧的不同变体。

客户端使用

不管是否包含 WS-Policy,从用户的角度来看,从 WSDL 中生成代码的效果是相同的。如果查看由包含 WS-Policy 的 WSDL 生成的客户机存根的内部,将发现策略在构建时被直接连接到服务描述的组件中,但是这被隐藏在实现的内部,不会影响到客户机代码使用的接口方法。

要在客户机中利用 WS-SecurityPolicy 配置,您一定 需要在客户机代码中采取一些操作。您至少需要在与您的存根实例相关联的 org.apache.axis2.client.ServiceClient 上使用 Rampart 模块。这一步是必须的,即使您在 WSDL 中包含了 Rampart 配置信息。不幸的是,在当前的代码中,似乎没有任何方法可以在操作或消息级别使用 Rampart,因此目前与 Axis2 客户机结合使用时,细粒度 WS-Security 的一部分好处就丢失了。

如果将 Rampart 配置与 WSDL 分离,正如建议的那样,您也需要对服务描述应用这些配置。清单 2 展示了用于本样例应用程序的客户机代码。它调用 applyPolicy() 方法来将包含 Rampart 配置的策略添加到服务器定义。


清单 2. 配置客户端操作
// create the client stub 
String target = args[0] + "://" + args[1] + ":" + args[2] + args[3]; 
System.out.println("Connecting to " + target); 
LibraryGranularStub stub = new LibraryGranularStub(target); 
 
// configure and engage rampart module 
ServiceClient client = stub._getServiceClient(); 
client.getAxisService().applyPolicy(loadPolicy("rampart-client-policy.xml")); 
client.engageModule("rampart"); 
 
// set the username and password for requests which use them 
Options options = client.getOptions(); 
options.setUserName("libuser"); 
options.setPassword("books"); 

上一页  1 2 3 4 5 6 7  下一页

Tags:Java Web 服务

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接