公司最近要采用CXF Web Service技术,本人写了个Demo,一路还都OK,但是就是在加入安全认证时出现问题,在百度、谷歌搜索了N久,参考修改了N久,还是解决不了,自己本人都解决吐了,现在求各位大神,大牛解决。
问题:(1)没有加入认证时,客户端连接请求成功!
(2)加入安全认证后,出现bug,在eclipse和MyEclipse出现的报错信息还不一样。
一、服务器代码:
1、ServerPasswordCallbackHandler.java 安全拦截器
2.IGreetingService 接口
3.GreetingServiceImpl.java 实现类
4.服务端applicationContext.xml
二、客户端:
1、客户端认证拦截器(out)
2、main客户端调用
3、客户端 applicationContext.xml
三、不同的开发环境报错信息居然不一样:
1、MyEclipse环境报错信息:
2、Eclipse环境报错:
四、尝试过的方法:
1、找到相应位置,将apache-cxf-2.7.4\lib\endorsed下的jar文件放到对应目录下即可。如果没有endorsed目录,则手动建立该目录。
2、JDK升级到1.7
3、等等
五、附上源代码
1、cxfdemo.zip ---服务端代码
2、csfdemoclient.zip --- 客户端代码
问题:(1)没有加入认证时,客户端连接请求成功!
(2)加入安全认证后,出现bug,在eclipse和MyEclipse出现的报错信息还不一样。
一、服务器代码:
1、ServerPasswordCallbackHandler.java 安全拦截器
package com.credit56.demo.cxf.handler.soap; 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.wss4j.common.ext.WSPasswordCallback; /** * <p class="detail"> * 功能:服务端的密码回调处理类 * </p> * * @ClassName: ClassServerPasswordCallbackHandler * @version V1.0 * @date 2013年12月24日 * @author <a href="">qinhailong</a> */ public class ServerPasswordCallbackHandler implements CallbackHandler { public static final String USER = "shuqin_wang"; public static final String PASSWORD = "000000"; /** * <p class="detail"> * 功能: * </p> * * @author <a href="mailto:engineer01@great-tao.com">qinhailong</a> * @date 2013年12月24日 * @param callbacks * @throws IOException * @throws UnsupportedCallbackException * @see javax.security.auth.callback.CallbackHandler#handle(javax.security.auth.callback.Callback[]) */ @Override public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { WSPasswordCallback wsPasswordCallBack = (WSPasswordCallback) callbacks[0]; System.out.println(wsPasswordCallBack.getIdentifier() + "\t" + wsPasswordCallBack.getPassword()); if (USER.equals(wsPasswordCallBack.getIdentifier()) && PASSWORD.equals(wsPasswordCallBack.getPassword())) { System.out.println("======= Successful ! ======="); } else { // throw new WSSecurityException("No Permission!"); } } }
2.IGreetingService 接口
package com.credit56.demo.cxf.service; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; import com.credit56.demo.cxf.model.Customer; /** * * <p class="detail"> * 功能:Hello World web service Demo * </p> * * @ClassName: HelloWordService * @version V1.0 * @date 2013年12月18日 * @author <a href="">qinhailong</a> */ @WebService public interface IGreetingService { @WebMethod // public String sayHello(@WebParam(name="name") String name); // 通过@WebParam(name="***")来设置WSDL中的参数名称,默认为arg0、arg1...... public String greeting(@WebParam(name = "name") String name); @WebMethod public Customer getCustomer(@WebParam(name = "customer") Customer customer); @WebMethod public String getCustomerOfJSON(); }
3.GreetingServiceImpl.java 实现类
package com.credit56.demo.cxf.service.impl; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Set; import javax.annotation.Resource; import javax.xml.ws.WebServiceContext; import javax.xml.ws.handler.MessageContext; import net.sf.json.JSONObject; import org.apache.cxf.interceptor.LoggingInInterceptor; import org.apache.cxf.interceptor.LoggingOutInterceptor; import org.apache.cxf.jaxws.JaxWsServerFactoryBean; import com.credit56.demo.cxf.model.Customer; import com.credit56.demo.cxf.service.IGreetingService; /** * <p class="detail"> * 功能:web service Demo * </p> * * @ClassName: HelloWorldServiceImpl * @version V1.0 * @date 2013年12月18日 * @author <a href="">qinhailong</a> */ public class GreetingServiceImpl implements IGreetingService { @Resource private WebServiceContext webServiceContext; /** * <p class="detail"> * 功能:问候语 * </p> * * @author <a href="">qinhailong</a> * @date 2013年12月18日 * @param name * @return * @see com.credit56.demo.cxf.handler.soap.service.IGreetingService#sayHello(java.lang.String) */ @Override public String greeting(String name) { System.out.println("进来了,亲,好啊=====" + name); return new StringBuffer(name).append(",Hello Word! currentTime is ").append(new Date()).toString(); } /** * * <p class="detail"> * 功能:返回Customer * </p> * * @author <a href="">qinhailong</a> * @date 2013年12月19日 * @param customer * @return * @see com.credit56.demo.cxf.handler.soap.service.IGreetingService#getCustomer(com.credit56.demo.cxf.handler.soap.model.Customer) */ @Override public Customer getCustomer(Customer customer) { MessageContext messageContext = webServiceContext.getMessageContext(); Set<String> keySets = messageContext.keySet(); for (String key : keySets) { System.out.println("=======key:" + messageContext.get(key)); /* * try { System.out.println("+++++++++scope:" + * messageContext.getScope(key)); } catch (Exception e) { * System.out.println("+++++++++++"+ key + "is not exits"); } */ } if (null != customer.getId()) { return customer; } Customer c = new Customer(); c.setId(1L); c.setBirthday(new SimpleDateFormat("yyyy-MM-dd").format(new Date())); c.setName("shuqin_wang"); return c; } /** * * <p class="detail"> * 功能:返回客户信息JOSN * </p> * * @author <a href="">qinhailong</a> * @date 2013年12月19日 * @return * @see com.credit56.demo.cxf.handler.soap.service.IGreetingService#getCustomerOfJSON() */ @Override public String getCustomerOfJSON() { Customer customer = this.getCustomer(new Customer()); JSONObject jsonObject = JSONObject.fromObject(customer); return jsonObject.toString(); } }
4.服务端applicationContext.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:context="http://www.springframework.org/schema/context" xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:jaxrs="http://cxf.apache.org/jaxrs" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd"> <!-- Import Apache CXF Bean Definition --> <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="wss4jInInterceptor" class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor"> <constructor-arg> <map> <entry key="action" value="UsernameToken" /> <entry key="passwordType" value="PasswordText" /> <entry key="passwordCallbackClass" value="com.credit56.demo.cxf.handler.soap.ServerPasswordCallbackHandler" /> </map> </constructor-arg> </bean> <jaxws:endpoint id="greetingService" implementor="com.credit56.demo.cxf.service.impl.GreetingServiceImpl" address="/greetingService"> <jaxws:inInterceptors> <ref bean="wss4jInInterceptor" /> </jaxws:inInterceptors> </jaxws:endpoint> <bean id="studentService" class="com.credit56.demo.cxf.service.impl.StudentServiceImpl" /> <jaxrs:server id="studentServiceWs" address="/studentService"> <jaxrs:serviceBeans> <ref bean="studentService" /> </jaxrs:serviceBeans> </jaxrs:server> </beans>
二、客户端:
1、客户端认证拦截器(out)
package com.credit56.demo.cxf.client.soap.handler; 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.wss4j.common.ext.WSPasswordCallback; /** * <p class="detail"> * 功能:这里写描述 * </p> * * @ClassName: ClientPasswordCallbackHandler * @version V1.0 * @date 2013年12月24日 * @author <a href="">qinhailong</a> */ public class ClientPasswordCallbackHandler implements CallbackHandler { public final static String USER = "shuqin_wang"; public final static String PASSWORD = "000000"; /** * <p class="detail"> * 功能: * </p> * * @author <a href=""></a> * @date 2013年12月24日 * @param callbacks * @throws IOException * @throws UnsupportedCallbackException * @see javax.security.auth.callback.CallbackHandler#handle(javax.security.auth.callback.Callback[]) */ @Override public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { WSPasswordCallback wsPasswordCallback = (WSPasswordCallback) callbacks[0]; wsPasswordCallback.setPassword(PASSWORD); wsPasswordCallback.setIdentifier(USER); System.out.println("~~~~~~~out OK!~~~~~~"); } }
2、main客户端调用
package com.credit56.demo.cxf.client; import java.text.SimpleDateFormat; import java.util.Date; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.credit56.demo.cxf.client.model.Customer; import com.credit56.demo.cxf.client.service.IGreetingService; //org/apache/xml/security/resource/xmlsecurity import org.apache.xml.security.resource.schema.*; public class CXFTest { public static void main(String[] args) { System.out.println("======"+ System.getProperty("java.endorsed.dirs")); IGreetingService greetingServiceClient = (IGreetingService) new ClassPathXmlApplicationContext( "classpath:applicationContext.xml").getBean("greetingServiceClient"); //greetingServiceClient.greeting("shuqin_wang"); Customer customer = new Customer(); customer.setId(1L); customer.setBirthday(new SimpleDateFormat("yyyy-MM-dd").format(new Date())); customer.setName("hailong_qin"); Customer c = greetingServiceClient.getCustomer(customer); System.out.println("id:" + c.getId() + " name:" + c.getName() + " birthday:" + c.getBirthday()); System.out.println(greetingServiceClient.getCustomerOfJSON()); } }
3、客户端 applicationContext.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:context="http://www.springframework.org/schema/context" xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:jaxrs="http://cxf.apache.org/jaxrs" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.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-extension-jaxrs-binding.xml" /> --> <import resource="classpath*:META-INF/cxf/cxf-servlet.xml" /> <bean id="wss4jOutInterceptor" class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor"> <constructor-arg> <map> <entry key="action" value="UsernameToken" /> <entry key="user" value="shuqin_wang" /> <entry key="passwordType" value="PasswordText" /> <entry key="passwordCallbackClass" value="com.credit56.demo.cxf.client.soap.handler.ClientPasswordCallbackHandler" /> </map> </constructor-arg> </bean> <!-- 通过与服务端配置相对的 CXF 标签 <jaxws:client> 来定义客户端访问服务的声明 --> <jaxws:client id="greetingServiceClient" serviceClass="com.credit56.demo.cxf.client.service.IGreetingService" address="http://localhost:80/cxfdemo/greetingService"> <jaxws:outInterceptors> <ref bean="wss4jOutInterceptor" /> </jaxws:outInterceptors> </jaxws:client> </beans>
三、不同的开发环境报错信息居然不一样:
1、MyEclipse环境报错信息:
24 17:33:40 org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean buildServiceFromClass 信息: Creating Service {http://service.client.cxf.demo.credit56.com/}IGreetingServiceService from class com.credit56.demo.cxf.client.service.IGreetingService Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'greetingServiceClient': FactoryBean threw exception on object creation; nested exception is java.lang.LinkageError: 正在从引导类加载器加载 JAXB 2.1 API, 但此 RI (来自jar:file:/F:/cxflib/apache-cxf-3.0.0-milestone1/lib/jaxb-impl-2.2.6.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class) 需要 2.2 API。请使用授权目录机制将 jaxb-api.jar 放在引导类加载器中。(请参阅 http://java.sun.com/j2se/1.6.0/docs/guide/standards/) at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:149) at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:102) at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1468) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:249) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1117) at com.credit56.demo.cxf.client.CXFTest.main(CXFTest.java:16) Caused by: java.lang.LinkageError: 正在从引导类加载器加载 JAXB 2.1 API, 但此 RI (来自jar:file:/F:/cxflib/apache-cxf-3.0.0-milestone1/lib/jaxb-impl-2.2.6.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class) 需要 2.2 API。请使用授权目录机制将 jaxb-api.jar 放在引导类加载器中。(请参阅 http://java.sun.com/j2se/1.6.0/docs/guide/standards/) at com.sun.xml.bind.v2.model.impl.ModelBuilder.<clinit>(ModelBuilder.java:178) at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:455) at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:303) at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:142) at com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1174) at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:162) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:210) at javax.xml.bind.ContextFinder.find(ContextFinder.java:368) at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:574) at org.apache.cxf.common.jaxb.JAXBContextCache$2.run(JAXBContextCache.java:331) at org.apache.cxf.common.jaxb.JAXBContextCache$2.run(JAXBContextCache.java:329) at java.security.AccessController.doPrivileged(Native Method) at org.apache.cxf.common.jaxb.JAXBContextCache.createContext(JAXBContextCache.java:329) at org.apache.cxf.common.jaxb.JAXBContextCache.getCachedContextAndSchemas(JAXBContextCache.java:230) at org.apache.cxf.jaxb.JAXBDataBinding.createJAXBContextAndSchemas(JAXBDataBinding.java:465) at org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:322) at org.apache.cxf.service.factory.AbstractServiceFactoryBean.initializeDataBindings(AbstractServiceFactoryBean.java:86) at org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean.buildServiceFromClass(ReflectionServiceFactoryBean.java:490) at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.buildServiceFromClass(JaxWsServiceFactoryBean.java:704) at org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:550) at org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:265) at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:215) at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:102) at org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:91) at org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryBean.java:157) at org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBean.java:142) at org.apache.cxf.jaxws.spring.JaxWsProxyFactoryBeanDefinitionParser$JAXWSSpringClientProxyFactoryBean.create(JaxWsProxyFactoryBeanDefinitionParser.java:79) at org.apache.cxf.jaxws.spring.JaxWsProxyFactoryBeanDefinitionParser$JAXWSSpringClientProxyFactoryBean.getObject(JaxWsProxyFactoryBeanDefinitionParser.java:83) at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:142) ... 6 more
2、Eclipse环境报错:
警告: Interceptor for {http://service.client.cxf.demo.credit56.com/}IGreetingServiceService#{http://service.client.cxf.demo.credit56.com/}getCustomer has thrown exception, unwinding now java.util.MissingResourceException: Can't find bundle for base name org/apache/xml/security/resource/xmlsecurity, locale zh_CN at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1499) at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1322) at java.util.ResourceBundle.getBundle(ResourceBundle.java:721) at org.apache.wss4j.common.crypto.WSProviderConfig$4.<init>(WSProviderConfig.java:138) at org.apache.wss4j.common.crypto.WSProviderConfig.initializeResourceBundles(WSProviderConfig.java:135) at org.apache.wss4j.common.crypto.WSProviderConfig.init(WSProviderConfig.java:69) at org.apache.wss4j.dom.WSSConfig.init(WSSConfig.java:387) at org.apache.wss4j.dom.WSSConfig.getNewInstance(WSSConfig.java:394) at org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor$WSS4JOutInterceptorInternal.handleMessage(WSS4JOutInterceptor.java:180) at org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor$WSS4JOutInterceptorInternal.handleMessage(WSS4JOutInterceptor.java:140) at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308) at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:502) at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:411) at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:314) at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:267) at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96) at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:137) at com.sun.proxy.$Proxy39.getCustomer(Unknown Source) at com.credit56.demo.cxf.client.CXFTest.main(CXFTest.java:28) Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Can't find bundle for base name org/apache/xml/security/resource/xmlsecurity, locale zh_CN at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:159) at com.sun.proxy.$Proxy39.getCustomer(Unknown Source) at com.credit56.demo.cxf.client.CXFTest.main(CXFTest.java:28) Caused by: java.util.MissingResourceException: Can't find bundle for base name org/apache/xml/security/resource/xmlsecurity, locale zh_CN at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1499) at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1322) at java.util.ResourceBundle.getBundle(ResourceBundle.java:721) at org.apache.wss4j.common.crypto.WSProviderConfig$4.<init>(WSProviderConfig.java:138) at org.apache.wss4j.common.crypto.WSProviderConfig.initializeResourceBundles(WSProviderConfig.java:135) at org.apache.wss4j.common.crypto.WSProviderConfig.init(WSProviderConfig.java:69) at org.apache.wss4j.dom.WSSConfig.init(WSSConfig.java:387) at org.apache.wss4j.dom.WSSConfig.getNewInstance(WSSConfig.java:394) at org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor$WSS4JOutInterceptorInternal.handleMessage(WSS4JOutInterceptor.java:180) at org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor$WSS4JOutInterceptorInternal.handleMessage(WSS4JOutInterceptor.java:140) at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308) at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:502) at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:411) at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:314) at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:267) at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96) at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:137) ... 2 more
四、尝试过的方法:
1、找到相应位置,将apache-cxf-2.7.4\lib\endorsed下的jar文件放到对应目录下即可。如果没有endorsed目录,则手动建立该目录。
2、JDK升级到1.7
3、等等
五、附上源代码
1、cxfdemo.zip ---服务端代码
2、csfdemoclient.zip --- 客户端代码
- cxfdemo.zip (140.1 KB)
- 下载次数: 14
- csfdemoclient.zip (18.2 KB)
- 下载次数: 12
发表评论
-
HttpClient 实战
2014-02-24 14:30 1598最近,开发了一个RESTFul方式Web Service的 ... -
CXF 整合 Spring 搭建Web Service
2013-12-30 17:30 1860一:CXF 的开发环境: 1、CXF版本:2.7.8 ,官网: ... -
CXF Web Service 安全认证出错?求大牛解决
2013-12-24 18:14 1公司最近要采用CXF Web Service技术,本人写了个D ... -
开源网店的权限管理问题——高人请进。。。。。。
2013-04-13 23:01 66最近在研究一个电子商务的开源项目,可能由于本人第一次看源代码, ...
相关推荐
6. **安全**:学习如何在CXF中实现认证和授权,如WS-Security。 7. **测试和调试**:使用CXF提供的工具进行服务测试和问题排查。 8. **Spring集成**:了解如何在Spring应用中整合CXF,利用Spring的依赖注入和配置...
**正文** 在IT行业中,Web服务是一种通过网络交换...总结,Apache CXF作为强大的Web服务框架,提供了一整套解决方案,涵盖了从服务创建到消费的全过程。理解和掌握CXF,将有助于提升你在Web服务开发领域的专业技能。
总之,"cxf入门例子(安全认证)" 是一个很好的起点,帮助初学者理解 CXF 如何处理 Web 服务的安全认证。通过学习这个例子,你将能够熟练地运用 CXF 创建安全的服务器端和客户端应用,同时也能够掌握如何配置和管理...
### Apache CXF Web Service 开发相关知识点 #### 一、Apache CXF简介 Apache CXF 是一个开源项目,提供了一套强大的框架用于构建和开发基于Java的Web服务。它支持多种协议,包括SOAP和REST,并且能够很好地与其他...
在本文中,我们将深入探讨如何使用Apache CXF V3.2.4实现带有安全认证的Web服务调用。Apache CXF是一个开源框架,它允许开发者创建和消费各种Web服务,包括SOAP和RESTful API。CXF 3.2版本引入了许多增强功能,包括...
在"Web Service学习-CXF开发Web Service实例demo(一)"中,我们将专注于SOAP Web Service的实现。以下是一些关键步骤: 1. **创建服务接口**:首先,你需要定义一个Java接口,这个接口会成为你的Web Service接口。...
实战Web Service 之 CXF 实战Web Service 之 CXF
详细的从入门到精通, 手把手的教你做WEB SERVICE 该资源借花献佛,是一个高手写的,我在这里借花献佛,推广推广,让大家多一个学习的机会,吃水不忘挖井人,轻大家也谢谢写该文档的高手
而Apache CXF则是一个强大的Web服务框架,用于创建和消费Web服务。本教程将详细介绍如何利用Spring Boot与CXF进行集成,以发布Web服务并实现用户和密码验证的客户端调用。 首先,我们需要在Spring Boot项目中引入...
【CXF与Spring整合Web服务详解】 在Java世界中,Apache CXF是一个广泛使用的开源框架,用于构建和部署Web服务。它提供了丰富的功能,包括SOAP、RESTful API的支持,以及与Spring框架的深度集成。本篇文章将深入探讨...