xFire + Spring 实现 WS-Security[数字签名和报文加密] 客户端配置详解

客户端配置:

<!-- 输入流模型处理类 -->
	<bean name="domInHandler" class="org.codehaus.xfire.util.dom.DOMInHandler"/>
	<!-- 输入流操作处理类 -->
	<bean name="wss4jInHandler" class="org.codehaus.xfire.security.wss4j.WSS4JInHandler">
		<property name="properties">
			<props>
				<prop key="action">Signature Encrypt Timestamp</prop><!-- 认证类型 组合操作,空格分隔  Encrypt(解密), Signature(验证签名)-->
				<prop key="decryptionPropFile">insecurity_enc.properties</prop><!-- 验证签名使用的密钥库数字证书配置 -->
				<prop key="signaturePropFile">insecurity_sign.properties</prop><!-- 解密使用的私钥相关配置 -->
				<prop key="passwordCallbackClass">密码回调类</prop><!-- 密码回调实现类 -->
				<prop key="enableSignatureConfirmation">false</prop><!-- 如果设置, 与输出(请求)端一致 -->
			</props>
		</property>
	</bean>

	<!-- 输出流模型处理类 -->
	<bean id="domOutHandler" class="org.codehaus.xfire.util.dom.DOMOutHandler"/>
	<!-- 加密方式处理类 -->
	<bean id="wss4jOutHandler" class="org.codehaus.xfire.security.wss4j.WSS4JOutHandler">
	     <property name="properties">
	     	<props>
	     		<prop key="action">Signature Encrypt Timestamp</prop>	     		
	     		<!-- 请求加密用户名 -->
	     		<prop key="encryptionUser">test</prop><!-- 输入(响应)端, 用此用户名对应的密码, 解密 -->
	     		<prop key="encryptionPropFile">outsecurity_enc.properties</prop><!-- 签名 -->
	     		<prop key="signaturePropFile">outsecurity_sign.properties</prop><!-- 加密 -->
	     		<prop key="user">agent</prop><!-- 用此用户名对应的密码,加密 -->
	     		<prop key="passwordCallbackClass">密码回调类</prop>
	     	</props>
	     </property>
	</bean>
	
	<!-- WebService 服务端配置  -->
	<bean id="client" class="org.codehaus.xfire.spring.remoting.XFireClientFactoryBean">
       <property name="serviceClass">          
   			<value>org.lei.Interface</value><!-- 服务接口 -->      
       </property>      
       <property name="wsdlDocumentUrl"><value>http://xx.xxx.xx.xx/services/xxx?wsdl</value><!-- WebService 服务地址 -->
       </property>
       
       	<!-- 对输入流的操作 -->
		<property name="inHandlers">
			<list>
				<ref bean="domInHandler"/><!-- 负责将STAX流模型的SOAP转换为DOM模型类 -->
				<ref bean="wss4jInHandler"/><!-- 对用户名和密码进行检查 -->
			</list>
		</property>
       
       <!-- 对输入流的操作 -->
       <property name="outHandlers">
       		<list>
	     		<ref bean="domOutHandler"/> 
	     		<ref bean="wss4jOutHandler"/>
	     	</list>       
       </property>     
     </bean>

 客户端的操作其实和服务端的操作基本一致, 也是要对输入和输出流分别按要求进行操作. 如设置认证类型及其顺序, 密码回调类的作用, 加密、签名属性文件的设置。

outsecurity_enc.properties……的属性文件与服务端使用的属性文件格式一致。

密码回调类:用法与服务端一致。

配置完成后, 便可使用 Spring 上下文内容对象 getBean(ID)的方法获取对象, 请求服务。

 

在使用过程中, 会遇到各种各样的异常情况. 这里就不详细说明了, 基本都是配置出错或缺少 Jar 包的问题导致。

-------

需要用的 Jar:

stax-api-1.0.1, jaxen-1.1-beta-9, jaxb-api-2.0, jaxb-impl-2.0.1, jaxb-xjc-2.0.1, wsdl4j-1.6.1, xfire-all-1.2.6, XmlSchema-1.4.2, wss4j-1.5.1, commons-lang-2.3, xmlsec-1.3.0, wstx-asl-3.9.2, xfire-jsr181-api-1.0-M1

你可能感兴趣的:(ws-security)