日期:2014-05-17  浏览次数:20689 次

cxf ws-security 加密和签名问题???
存在问题:服务器端的WSS4J拦截器不执行,其它运行正常!配置代码如下:

一.客户端:
1.applicationContext-client.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="  
  http://www.springframework.org/schema/beans  
  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  http://cxf.apache.org/jaxws  
  http://cxf.apache.org/schemas/jaxws.xsd">

<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

<bean id="wss4jOutInterceptor" class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor">
<constructor-arg type="java.util.Map">
<map>
<entry key="action" value="Signature" />
<entry key="user" value="apmclient" />
<entry key="passwordCallbackClass"
value="client.ClientPasswordCallback" />
<entry key="signaturePropFile" value="client_sign.properties"></entry>
</map>
</constructor-arg>
</bean>
<jaxws:client id="service"
address="http://localhost:8080/SIPService1/service/AlgorithmService" serviceClass="service.IAlgorithmService">
<jaxws:outInterceptors>
<ref bean="wss4jOutInterceptor" />
</jaxws:outInterceptors>
</jaxws:client>

</beans>

2.client_sign.properties
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
org.apache.ws.security.crypto.merlin.keystore.type=jks
org.apache.ws.security.crypto.merlin.keystore.password=keystorePass
#org.apache.ws.security.crypto.merlin.alias.password=apmclientpass
org.apache.ws.security.crypto.merlin.keystore.alias=apmclient
org.apache.ws.security.crypto.merlin.file=clientStore.jks

3.客户端的拦截类(正常执行)
public class ClientPasswordCallback implements CallbackHandler {

public void handle(Callback[] callbacks) throws IOException,
UnsupportedCallbackException {
for (int i = 0; i < callbacks.length; i++) {
WSPasswordCallback pc = (WSPasswordCallback) callbacks[i];
pc.setPassword("apmclientpass");
pc.setIdentifier("admin");
System.out.println("-----------client---------------"+pc.getIdentifier());
}
}

}

4.调用代码
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "client/applicationContext-client.xml" });

IAlgorithmService service = (IAlgorithmService) context
.getBean("service");

InputInfo inputInfo = new InputInfo();
inputInfo.setSentenceA("我住在北京");

OutputInfo oi = service.getAnalyticStructure(inputInfo);
System.out.println("-----------" + oi.getSubject());
System.out.println("-----------" + oi.getPredicate());
System.out.println("-----------" + oi.getObject());
System.out.println("-----------" + oi.getSubjectAttribute());
System.out.println("-----------" + oi.getObjectAttribute());
System.out.println("-----------" + oi.getA