- 浏览: 341453 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
zqb666kkk:
有示例代码吗
WebService CXF学习(高级篇3):WS-Security -
zhujiangtaobl0505:
楼主有源码没?发下,我邮箱465971531@qq.com,我 ...
WebService CXF学习(高级篇2):CXF+Spring+Hibernate -
ssy341:
http://localhost:8080/jforum/in ...
JForum安装详解 -
songzht:
看了上面的代码,这两个类型是怎么定义的?private Bas ...
JfreeChar结合struts2展示柱状图和饼状图(已解决乱码问题) -
Getwaysun:
持久化类中使用boolean定义某个字段后,报Null val ...
null不能赋值给int类型,Integer可以。
这一节我们来探讨一下WebService安全问题,如果所有系统都运行在一个封闭的局域网内,那么可以不考虑网络攻击,拒绝服务,消息篡改,窃取等问题。但通常情况都接入互联网,那么我就得考虑信息安全问题,像前面那样直接将消息裸传,肯定不行。那么,我们就得给消息加密。CXF可以结合WSS4J来对消息安全进行管理,可以使用令牌,X.509认证对消息头或内容进行加密。这节我只对令牌加密做一个简单的描述,我们还以Demo的形式来讲解一下。
这个Demo是在CXF+Spring+Hibernate的基础修改而成。在这里我只针对修改的东西进行讲解。
Java代码
action:UsernameToken指使用用户令牌
passwordType:PasswordText指密码加密策略,这里直接文本
user:cxfServer指别名
passwordCallBackRef:serverPasswordCallback指消息验证
消息验证类:
Java代码
消息验证类通过实现CallbackHandler接口,实现handle方法来进行用户认证。
那么,客户端又怎样来验证消息是否确呢。
Java代码
客户端在发送SOAP时对消息对认证,策略跟服务端一样。但是认证类有所区别:
Java代码
客户端在发送消息,设置好用户名和密码。服务端用相应的用户名和密码进行验证。
这个Demo是在CXF+Spring+Hibernate的基础修改而成。在这里我只针对修改的东西进行讲解。
Java代码
<?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-2.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" /> <jaxws:endpoint id="service" implementor="com.itdcl.service.ServiceImpl" address="/Service"> <jaxws:inInterceptors> <bean class="org.apache.cxf.interceptor.LoggingInInterceptor" /> <bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor" /> <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 id="serverPasswordCallback" class="com.itdcl.ws.ServerPasswordCallback" /> </beans> <?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-2.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" /> <jaxws:endpoint id="service" implementor="com.itdcl.service.ServiceImpl" address="/Service"> <jaxws:inInterceptors> <bean class="org.apache.cxf.interceptor.LoggingInInterceptor" /> <bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor" /> <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 id="serverPasswordCallback" class="com.itdcl.ws.ServerPasswordCallback" /> </beans>
action:UsernameToken指使用用户令牌
passwordType:PasswordText指密码加密策略,这里直接文本
user:cxfServer指别名
passwordCallBackRef:serverPasswordCallback指消息验证
消息验证类:
Java代码
package com.itdcl.ws; import java.io.IOException; import javax.security.auth.callback.Callback; import javax.security.auth.callback.CallbackHandler; import javax.security.auth.callback.UnsupportedCallbackException; import org.apache.ws.security.WSPasswordCallback; public class ServerPasswordCallback implements CallbackHandler { public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { WSPasswordCallback pc = (WSPasswordCallback) callbacks[0]; String pw = pc.getPassword(); String idf = pc.getIdentifier(); System.out.println("password:"+pw); System.out.println("identifier:"+idf); if (pw.equals("josen") && idf.equals("admin")) { // 验证通过 } else { throw new SecurityException("验证失败"); } } } package com.itdcl.ws; import java.io.IOException; import javax.security.auth.callback.Callback; import javax.security.auth.callback.CallbackHandler; import javax.security.auth.callback.UnsupportedCallbackException; import org.apache.ws.security.WSPasswordCallback; public class ServerPasswordCallback implements CallbackHandler { public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { WSPasswordCallback pc = (WSPasswordCallback) callbacks[0]; String pw = pc.getPassword(); String idf = pc.getIdentifier(); System.out.println("password:"+pw); System.out.println("identifier:"+idf); if (pw.equals("josen") && idf.equals("admin")) { // 验证通过 } else { throw new SecurityException("验证失败"); } } }
消息验证类通过实现CallbackHandler接口,实现handle方法来进行用户认证。
那么,客户端又怎样来验证消息是否确呢。
Java代码
<?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-2.0.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <jaxws:client id="service" address="http://localhost:9999/cxf/Service" serviceClass="com.itdcl.service.IService"> <jaxws:outInterceptors> <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" /> <bean class="org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor" /> <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> </jaxws:outInterceptors> </jaxws:client> <bean id="clientPasswordCallback" class="com.itdcl.ws.ClientPasswordCallback" /> </beans> <?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-2.0.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <jaxws:client id="service" address="http://localhost:9999/cxf/Service" serviceClass="com.itdcl.service.IService"> <jaxws:outInterceptors> <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" /> <bean class="org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor" /> <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> </jaxws:outInterceptors> </jaxws:client> <bean id="clientPasswordCallback" class="com.itdcl.ws.ClientPasswordCallback" /> </beans>
客户端在发送SOAP时对消息对认证,策略跟服务端一样。但是认证类有所区别:
Java代码
package com.itdcl.ws; import java.io.IOException; import javax.security.auth.callback.Callback; import javax.security.auth.callback.CallbackHandler; import javax.security.auth.callback.UnsupportedCallbackException; import org.apache.ws.security.WSPasswordCallback; 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("josen"); pc.setIdentifier("admin"); } } } package com.itdcl.ws; import java.io.IOException; import javax.security.auth.callback.Callback; import javax.security.auth.callback.CallbackHandler; import javax.security.auth.callback.UnsupportedCallbackException; import org.apache.ws.security.WSPasswordCallback; 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("josen"); pc.setIdentifier("admin"); } } }
客户端在发送消息,设置好用户名和密码。服务端用相应的用户名和密码进行验证。
发表评论
-
WebService CXF学习(高级篇2):CXF+Spring+Hibernate
2011-03-21 10:13 1925前一节仅仅只讲了与Spring整合,没有涉及到数据库,而且 ... -
WebService CXF学习(进阶篇4):JAXB剖析
2011-03-21 10:08 2121前面几节我们讲解对象传递,但是通常情况下我们不直接传对象,因为 ... -
WebService CXF学习(高级篇1):整合Spring框架
2011-03-21 10:05 2052通过前面两节的讲解,相信你对CXF框架开始有一些认识了。在当今 ... -
WebService CXF学习(进阶篇3):对象传递
2011-03-21 10:03 1935前面几节都是讲一些理论知识,现在又用一个例子来说明一下,这一节 ... -
WebService CXF学习(进阶篇2):JAX-WS讲解
2011-03-21 10:00 1396JAX-WS规范是一组XML web services的 ... -
WebService CXF学习(进阶篇1):SOAP讲解
2011-03-21 09:49 1597SOAP 是基于 XML 的简易协 ... -
WebService CXF学习(入门篇3):WSDL描述
2011-03-21 09:42 1853由于网上有很多相关这 ... -
WebService CXF学习(入门篇2):HelloWorld
2011-03-21 09:37 2060理论联系实际,单单只讲理论那就成了纸上谈兵,用一个HelloW ... -
WebService CXF学习(入门篇1):CXF由来
2011-03-21 09:35 1845WebService介绍 WebServi ...
相关推荐
5. **签名和加密**:如果需要更高级的安全性,ws-security还支持消息签名和加密。签名可以证明消息来源的真实性,加密则可以保护数据的隐私。在CXF中,你可以配置`WSS4JOutInterceptor`来添加这些功能。 6. **测试...
3. **wss4j-ws-security-stax.jar**:STAX(Streaming API for XML)版本的实现,适用于处理大型XML文档,以提高性能。 4. **wss4j-bindings.jar**:包含了与不同Web服务框架(如CXF、Axis2等)的绑定和集成代码。 5...
CXF使用WSS4J实现WS-Security规范,本例的配置是Timestamp Signature Encrypt,具体使用可以参考我的博客http://blog.csdn.net/wangchsh2008/article/details/6708270
综上所述,"cxf+ws-security-JAR"是针对Web服务安全调用的解决方案,通过Apache CXF和WS-Security标准,为Web服务提供了强大的安全保障,确保了敏感数据的传输安全和用户身份的有效验证。这个JAR包很可能包含了一些...
【标题】"我的cxf与ws-security"涉及的是在Java Web服务开发中使用Apache CXF框架集成WS-Security(Web Service Security)的安全机制。Apache CXF是一个开源的、功能丰富的Web服务框架,它允许开发者创建和消费各种...
1. **全面的Web服务支持**:CXF支持多种Web服务标准,如SOAP 1.1/1.2、WSDL(Web Services Description Language)、WS-I Basic Profile、WS-Security等,使得开发符合标准的Web服务变得更加便捷。 2. **RESTful...
做开发时,查了大量资料,发现一比较全面的资料,分享一下!...WebService CXF学习——高级篇(一)(二) 1.整合Spring框架 2.CXF+Spring+Hibernate 3.WS-Security WebService CXF学习——JAXB剖析
CXF支持多种协议,如SOAP、REST、XML以及各种WS-*标准,如WS-Security、WS-ReliableMessaging等。它的优势在于能够无缝地将Web服务与Java对象模型(JAX-WS和JAX-RS)结合,简化了服务的开发过程。 二、PC端Web ...
cxf ws-Security的实现 WS-SecurityPolicy 安全配置指定在客户机和服务之间交换的消息所需的安全处理。在大多数情况下,Web 服务堆栈还需要更多信息,才能对消息交换应用安全措施。 里面有2个project,分别server ...
3. **JAX-WS和JAX-RS支持**:CXF完全支持JAX-WS(Java API for XML Web Services)和JAX-RS(Java API for RESTful Web Services),使开发者能轻松地创建和消费这两种类型的Web服务。 4. **数据绑定**:CXF支持...
3. **协议栈**:CXF实现了多种Web服务标准,如WS-Security、WS-Addressing、WS-ReliableMessaging等,为开发者提供了一套完整的WS-*协议栈。 4. **数据绑定**:CXF支持JAXB(Java Architecture for XML Binding)...
- CXF支持SOAP 1.1和1.2版本,提供了完整的SOAP处理能力,包括消息编码、处理WS-Security等。 - 使用CXF,开发者可以通过JAX-WS(Java API for XML Web Services)来创建SOAP服务。JAX-WS是Java中定义Web服务的...
- 利用CXF的WS-Security插件进行安全性测试,确保通信过程中数据的完整性和保密性。 - 使用CXF的WSDL工具生成客户端代码,或者通过Postman等工具模拟请求,进行功能测试和性能测试。 5. **注意事项**: - 考虑到...
1. **强大的SOAP支持**:CXF支持各种WS-*规范,如WS-Security、WS-Addressing、WS-RM等,提供了一流的SOAP处理能力。 2. **RESTful API支持**:CXF可以轻松地创建和消费RESTful服务,支持JAX-RS标准。 3. **数据绑定...
4. **强大的调试和测试工具**:CXF提供了一套完整的测试工具,如CXFWS-Security测试工具,可以帮助开发者调试和测试Web服务的安全性。 5. **易用的API**:CXF的API设计简洁,易于理解和使用,降低了学习曲线。 在...
**WebService CXF 学习——入门篇** **一、WebService CXF 由来与目标** Apache CXF 是一个流行的开源框架,它源自 ObjectWeb Celtix 和 CodeHaus XFire 的合并,这两个项目分别由 IONA 公司和业界知名SOAP堆栈...
- **JAX-WS(Java API for XML Web Services)**:CXF 实现了 JAX-WS 规范,使得开发 SOAP Web 服务更加方便,提供了服务端和客户端的工具集。 - **SOAP 消息处理**:CXF 支持 SOAP 消息的编码和解码,包括 SOAP ...
8. **安全与认证**:CXF支持多种安全机制,包括基本认证、digest认证、WS-Security等,确保Web服务的安全性。开发者可以根据需要添加相应的安全配置。 9. **错误处理与日志**:CXF提供了详细的错误处理机制和日志...
### WebService之CXF开发指南 #### 一、概述 WebService技术已经成为企业级应用中不可或缺的一部分,它使得不同系统之间能够以标准化的方式进行交互。在众多WebService框架中,Apache CXF因其灵活、强大的功能和...
3. **JAX-WS支持**:CXF提供了对Java API for XML Web Services (JAX-WS)的强大支持,允许开发者使用Java注解轻松创建SOAP Web服务。JAX-WS标准定义了如何在Java中表示Web服务接口和服务端点。 4. **JAX-RS支持**:...