保护WebLogic Server上WebServices
本文首先概述了消息完整性、消息机密性和身份验证,简短讨论了怎样通过策略注释加以实现。接着实例指导如何构建一个基本服务,添加消息完整性、机密性和授权……
为服务加入机密性
现在我们要为服务加入机密性。这意味着希望在客户端和服务器之间加密消息(SOAP体)。其基本过程与添加消息的完整性一样:注释并重新生成服务,然后更新客户端。
打开WTP中的HelloWorldService.java。添加下面突出显示的注释:
| @Policies({ @Policy(uri="policy:Sign.xml"), @Policy(uri="policy:Encrypt.xml") }) |
(别忘了在Sign.xml注释后添加逗号。)
这个注释指定我们希望客户端和服务器使用加密。默认加密是双向的(即,从客户端到服务器、从服务器到客户端两个方向)。如果只要求单向加密,可向注释添加可选的direction属性来处理这一问题。
现在需要重建服务。从命令窗口运行ant命令。如前,您将看到BUILD SUCCESSFUL消息。
现在,更新客户端。首先,像以前那样获得WSDL文件并保存。用编辑器打开它。您将注意到一个新的元素:wssp:Confidentiality。这示意客户端使用加密。还请注意如下所示的Encypt.xml策略的内容:
| <wsp:Policy s0:Id="Encrypt.xml"> ... </wsp:Policy> ... <portType name="HelloWorldPortType" wsp:PolicyURIs="#Sign.xml #Encrypt.xml"> .. </portType> |
由于新的部署重新生成了WSDL文件,我们需要再为监视器更新端口号。WSDL文件末尾处有如下代码:
<s2:address location="http://localhost:7001/HelloWorldService/HelloWorldService"/>
如下所示将端口号改为7002:
<s2:address location="http://localhost:7002/HelloWorldService/HelloWorldService"/>
保存并关闭WSDL文件。现在,从命令shell窗口运行ant -buildfile gen-client.xml命令,您会看到BUILD SUCCESSFUL消息,这时客户代理已经更新了。
下面还要做什么呢?实际上不需要任何改动了。客户端无需添加任何代码使消息加密。客户端代理将提供所有的加密工作。这是使用Web services安全机制的一个主要优点;开发人员编写任何加密代码!
运行HelloWorldClient,您将看到正常的问候响应。有什么改变了?初看起来似乎并无变化。然而,检查TCP/IP监视器,您将看到请求和响应已经加密了;无法像先前那样找到
消息机密性已经被加入服务了!
- 本文关键词:

