1:服务端spring里的配置:
- <bean id="Customer" class="org.web.HelloServiceImpl"></bean>
- lt;jaxws:endpoint id="custom" implementor="#Customer" address="/web" >
- <jaxws:inInterceptors>
- <bean class="org.apache.cxf.interceptor.LoggingInInterceptor" />
- <!--<bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor" />
- -->
- <bean class="org.web.soapHeader.ReadSoapHeader"></bean>
- <!--<bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
- <constructor-arg>
- <map>
- <entry key="action" value="UsernameToken" />
- <entry key="passwordType"
- value="PasswordText" />
- <entry key="user" value="cxfServer" />
- <entry key="passwordCallbackRef">
- <ref bean="serverPasswordCallback" />
- </entry>
- </map>
- </constructor-arg>
- </bean> -->
- </jaxws:inInterceptors>
- </jaxws:endpoint>
这个里面是有注释的..区别上一个密码验证的示例!
关键代码就有一句: <bean class="org.web.soapHeader.ReadSoapHeader"></bean>
这个是自己写的读取soap信息.查看密码是否正确!
2:soap读入信息的验证:ReadSoapHeader代码:
- public class ReadSoapHeader extends AbstractPhaseInterceptor<SoapMessage> {
- private SAAJInInterceptor saa=new SAAJInInterceptor();
- public ReadSoapHeader(){
- super(Phase.PRE_PROTOCOL);
- getAfter().add(SAAJInInterceptor.class.getName());
- }
- public void handleMessage(SoapMessage message) throws Fault {
- SOAPMessage mess=message.getContent(SOAPMessage.class);
- if(mess==null){
- saa.handleMessage(message);
- mess=message.getContent(SOAPMessage.class);
- }
- SOAPHeader head=null;
- try {
- head = mess.getSOAPHeader();
- } catch (SOAPException e) {
- e.printStackTrace();
- }
- if(head==null){
- return;
- }
- NodeList nodes=head.getElementsByTagName("tns:spId");
- NodeList nodepass=head.getElementsByTagName("tns:spPassword");
- if(nodes.item(0).getTextContent().indexOf("wdw")!=-1){
- if(nodepass.item(0).getTextContent().equals("wdwsb")){
- System.out.println("认证成功");
- }
- }
- else{
- SOAPException soapExc=new SOAPException("认证错误");
- throw new Fault(soapExc);
- }
- }
- }
功能:判断客户端传来的soap信息头是否有密码..有的话判断是否正确!
3:客户端spring的配置:
- <bean id="webTest" class="org.web.HelloService" factory-bean="client" factory-method="create"/>
- <bean id="client" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean" >
- <property name="address" value="http://127.0.0.1:88/Hello/web/web"></property>
- <property name="serviceClass" value="org.web.HelloService"></property>
- <property name="outInterceptors">
- <list>
- <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
- <!--<bean class="org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor" /> -->
- <bean class="org.web.soapHeader.AddSoapHeader"></bean>
- <!--<bean class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor">
- <constructor-arg>
- <map>
- <entry key="action" value="UsernameToken" />
- <entry key="passwordType" value="PasswordText" />
- <entry key="user" value="cxfClient" />
- <entry key="passwordCallbackRef">
- <ref bean="clientPasswordCallback" />
- </entry>
- </map>
- </constructor-arg>
- </bean>
- -->
- </list>
- </property>
- </bean>
PS:注意注释>...重点是:
- <bean class="org.web.soapHeader.AddSoapHeader"></bean>
4:对soap进行如入头信息.把密码加进去:AddSoapHeader代码:
- public class AddSoapHeader extends AbstractSoapInterceptor {
- private static String nameURI="http://127.0.0.1/Hello/web";
-
- public AddSoapHeader(){
- super(Phase.WRITE);
- }
- public void handleMessage(SoapMessage message) throws Fault {
- SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- Date date=new Date();
- String time =sd.format(date);
- String spPassword="wdwsb";
- String spName="wdw";
-
- QName qname=new QName("RequestSOAPHeader");
- Document doc=DOMUtils.createDocument();
-
- Element spId=doc.createElement("tns:spId");
- spId.setTextContent(spName);
-
- Element spPass=doc.createElement("tns:spPassword");
- spPass.setTextContent(spPassword);
-
- Element root=doc.createElementNS(nameURI, "tns:RequestSOAPHeader");
- root.appendChild(spId);
- root.appendChild(spPass);
-
- SoapHeader head=new SoapHeader(qname,root);
- List<Header> headers=message.getHeaders();
- headers.add(head);
- }
- }
很简单的东西...现在密码已经加进去了...spring里也已经配置好了..
客户端就可以正常的请求了..对请求的内容会进行soap头处理.把密码加进去....
服务端通过了客户端的权限密码请求就可以了.
转自:http://blog.csdn.net/keeyce/article/details/7090753
分享到:
相关推荐
本教程将详细介绍如何利用Spring Boot与CXF进行集成,以发布Web服务并实现用户和密码验证的客户端调用。 首先,我们需要在Spring Boot项目中引入CXF的依赖。这通常通过在`pom.xml`文件中添加对应的Maven依赖来完成...
同时,配置HTTPS需要在CXF的Servlet配置中启用SSL,指定密钥库路径和密码。 客户端开发相对简单,它通过CXF的WSClientAPI动态生成代理对象,调用远程服务。首先,我们需要设置HTTPS的信任管理器,信任服务端的证书...
本教程将基于CXF构建一个简单的Web服务,包括服务端和客户端的实现。我们将使用CXF提供的工具和服务接口来创建服务,然后通过客户端调用来验证服务的正确性。 ### 1. CXF简介 CXF是Apache软件基金会的一个项目,它...
总结,"CXF 通过用户名和密码进行验证"涉及到了Web服务安全的基本概念,包括WS-Security标准、CXF的安全配置以及最佳实践。理解并正确应用这些知识对于开发安全的Web服务至关重要。提供的压缩包文件"cxftestClient...
### CXF服务端和客户端应用开发指南:详细解析与实践 #### 一、CXF概述与应用场景 CXF(Camel XFire Framework)是Apache软件基金会的一个开源项目,旨在简化Web Services的开发过程,提供了一个强大的框架来创建...
**标题解析:** "CXF和Spring整合开发的服务端及客户端" 指的是使用Apache CXF框架与Spring框架相结合,构建服务端(服务提供者)和服务端客户端(服务消费者)。CXF是一个开源的Web服务框架,它允许开发者创建和...
5. **客户端配置**:同样,客户端也需要配置其证书,并设置如何验证服务端的证书。CXF客户端API允许我们设置这些属性。 6. **测试通信**:最后,通过发起一个带有WS-Security头的SOAP请求,测试加密和认证是否成功...
2. **客户端配置**: - 配置CXF客户端,添加安全拦截器,如WSS4JOutInterceptor,以添加必要的安全头部。 - 客户端需要提供认证信息,对于基本认证,这可以通过设置HTTP请求头完成;对于WS-Security,可能需要创建...
Java WebService CXF客户端调用和服务端的实现是企业级应用程序中常见的通信方式,它基于标准的SOAP(Simple Object Access Protocol)协议,提供了一种在分布式环境中交换信息的方法。CXF是一个开源框架,它简化了...
它允许开发者以Java注解或XML方式定义服务接口,并提供了丰富的客户端和服务端工具。 3. **整合过程** - 首先,我们需要在`pom.xml`中添加CXF和SpringBoot的相关依赖。 - 创建一个服务接口,使用JAX-WS注解如`@...
4. 测试:编写测试用例,验证服务端和客户端的正常交互。 六、注意事项 1. 异常处理:在服务端和客户端都要进行适当的异常处理,确保服务的健壮性。 2. 安全性:考虑服务的安全性,如使用HTTPS,认证和授权等。 3. ...
9. **源码分析**:提供的源码示例应该包含了服务端和客户端的完整实现,包括Spring配置文件、服务接口和实现类、以及测试代码。通过研究这些代码,可以更深入地理解如何结合CXF和Spring来创建和消费基于HTTPS的Web...
将自定义的Interceptor添加到CXF服务端或客户端的配置中。如果是Spring配置,可以在`cxf.xml`文件中添加以下代码: ```xml <cxf:bus> <cxf:outInterceptors> </cxf:outInterceptors> </cxf:bus> ``` 4. *...
### CXF 开发 WebService 服务端详解 #### 一、引言 随着企业级应用对服务化的不断追求,Web Service 成为了实现不同系统间通信的重要手段之一。Apache CXF 是一个高性能、易于使用的框架,它支持多种协议,如SOAP...
`WSSpring`可能包含了Spring配置文件以及与服务相关的类,而`WSTest`可能包含测试用例,用于验证服务端和客户端的正确配置和功能。 总结来说,"spring2.5+xfire1.2.6 客户端和服务端的配置"涉及到的是一项历史性的...
测试部分可能包含了一些单元测试或者集成测试,通过运行这些测试可以验证客户端和服务端的交互是否正常。 为了实现多数据源动态切换,项目可能使用了Spring的`AbstractRoutingDataSource`类。这是一个抽象数据源,...
5. **处理异常和认证**:ONVIF服务可能需要身份验证,如用户名和密码。你需要在创建服务代理时提供这些凭证。同时,处理可能的SOAP或网络异常也很重要。 6. **测试和调试**:编译并运行你的客户端应用,测试与ONVIF...
2. **CXF配置**:在服务端,你需要将生成的证书和私钥添加到服务器的Keystore中,并在CXF的服务器配置中指定Keystore路径和密码。在客户端,需要将信任的证书添加到Truststore,并配置Truststore信息。 3. **安全...
1. **基本认证**:这是最简单的身份验证方式,涉及到用户名和密码的传递。在CXF中,可以通过在Spring配置文件中添加`<security:basic-authentication>`元素来启用此功能。 2. **Digest认证**:相比基本认证,Digest...
- 如果服务配置了安全机制(如SSL/TLS、WS-Security),CXF会在客户端启动时进行相应的安全设置,如证书验证、用户名/密码认证等。 通过以上步骤,CXF客户端完成了启动和准备过程,能够向服务端发起请求并处理响应...