cxf ws_security

转载 2012年03月30日 18:11:51
CXF的webService已经创建好,但没有安全可言,毕竟这是Internet服务呀。
CXF给了一个很完整的安全架构,但CXF给出的ws_security DEMO太复杂了,又是password jks X509 Timestamp。 我试了很多次都没有成功。化繁为简,只实现一个user password好了。其实CXF和Spring——ACEGI的认证机制很像的都是使用了intercetor。
下面开始
编写cxf.xml在原来的bean的地方声明一下就可以了
Java代码
  1.     <bean id="WSS4JInInterceptor" class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">   
  2.         <constructor-arg>   
  3.             <map>   
  4.                 <entry key="action" value="UsernameToken" />   
  5.                 <entry key="passwordType" value="PasswordText" />   
  6.                 <entry key="passwordCallbackClass"  
  7.                     value="com.mms.webservice.test.ServerPasswordCallback" />  
  8.                 <!--
  9.                    这里和上面的passwordCallbackClass效果一样,只不过是引用一个受管Bean,注入资源     
  10.                   <entry key="passwordCallbackRef">
                        <ref bean="serverPasswordCallback"/>
                      </entry>    

  11.                   在外面的位置可以继续添加

  12.                   <bean id="serverPasswordCallback"                                                                          adclass="cn.sz_sunshine.envinspector.security.ServerPasswordCallback">
                           <property name="userManager">
                              <ref bean="UserManager" />
                           </property>
                      </bean>  
  13.                 -->
  14.             </map>   
  15.         </constructor-arg>   
  16.     </bean>   
  17.   
  18. <jaxws:endpoint id="helloWorld"  
  19.         implementor="com.mms.webservice.HelloWorldImpl"  
  20.         address="/HelloWorld">   
  21.         <jaxws:inInterceptors>   
  22.         <!--    
  23.             <bean   
  24.                 class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor" />   
  25.             <bean   
  26.                 class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">   
  27.                 <constructor-arg>   
  28.                     <map>   
  29.                         <entry key="action" value="UsernameToken" />   
  30.                         <entry key="passwordType" value="PasswordText" />   
  31.                         <entry key="passwordCallbackClass"  
  32.                             value="com.mms.webservice.test.ServerPasswordCallback" />   
  33.                     </map>   
  34.                 </constructor-arg>   
  35.             </bean>   
  36.              -->   
  37.              <ref bean="WSS4JInInterceptor" />   
  38.         </jaxws:inInterceptors>   
  39.     </jaxws:endpoint>  
  1.     <bean id="WSS4JInInterceptor" class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">  
  2.         <constructor-arg>  
  3.             <map>  
  4.                 <entry key="action" value="UsernameToken" />  
  5.                 <entry key="passwordType" value="PasswordText" />  
  6.                 <entry key="passwordCallbackClass"  
  7.                     value="com.mms.webservice.test.ServerPasswordCallback" />  
  8.             </map>  
  9.         </constructor-arg>  
  10.     </bean>  
  11.   
  12. <jaxws:endpoint id="helloWorld"  
  13.         implementor="com.mms.webservice.HelloWorldImpl"  
  14.         address="/HelloWorld">  
  15.         <jaxws:inInterceptors>  
  16.         <!--   
  17.             <bean  
  18.                 class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor" />  
  19.             <bean  
  20.                 class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">  
  21.                 <constructor-arg>  
  22.                     <map>  
  23.                         <entry key="action" value="UsernameToken" />  
  24.                         <entry key="passwordType" value="PasswordText" />  
  25.                         <entry key="passwordCallbackClass"  
  26.                             value="com.mms.webservice.test.ServerPasswordCallback" />  
  27.                     </map>  
  28.                 </constructor-arg>  
  29.             </bean>  
  30.              -->  
  31.              <ref bean="WSS4JInInterceptor" />  
  32.         </jaxws:inInterceptors>  
  33.     </jaxws:endpoint>  

WSS4JInInterceptor就是我们要定义的东东了。CXf已经帮你写好了。设置属性就可以了。里面属性值挺多的,CXF的文档就是太简单了,opensource的弊病!属性值就查API吧。
下面需要写server端的密码回调函数,验证logic就在这里定义了。
Java代码 复制代码
  1. package com.mms.webservice.test;   
  2.   
  3. import java.io.IOException;   
  4. import java.util.ResourceBundle;   
  5.   
  6. import javax.security.auth.callback.Callback;   
  7. import javax.security.auth.callback.CallbackHandler;   
  8. import javax.security.auth.callback.UnsupportedCallbackException;   
  9.   
  10. import org.apache.ws.security.WSPasswordCallback;   
  11.   
  12. public class ServerPasswordCallback implements CallbackHandler {   
  13.   
  14.     private static final String BUNDLE_LOCATION = "com.mms.webservice.test.pass";   
  15.     private static final String PASSWORD_PROPERTY_NAME = "auth.manager.password";   
  16.   
  17.     private static String password;   
  18.     static {   
  19.         final ResourceBundle bundle = ResourceBundle.getBundle(BUNDLE_LOCATION);   
  20.         password = bundle.getString(PASSWORD_PROPERTY_NAME);   
  21.     }   
  22.   
  23.     public void handle(Callback[] callbacks) throws IOException,   
  24.             UnsupportedCallbackException {   
  25.   
  26.         WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];   
  27.   
  28.         // Set the password on the callback. This will be compared to the   
  29.         // password which was sent from the client.   
  30.         // We can call pc.getIdentifer() right here to check the username   
  31.         // if we want each client to have it's own password.   
  32.         if (pc.getIdentifer().equalsIgnoreCase("eric")) {   
  33.             if (!pc.getPassword().equals(password)) {   
  34.                 throw new SecurityException("wrong password");   
  35.             }   
  36.         }   
  37.         else  
  38.         {   
  39.             throw new SecurityException("the user does not exits");   
  40.         }   
  41.   
  42.     }   
  43.   
  44. }  
  1. package com.mms.webservice.test;  
  2.   
  3. import java.io.IOException;  
  4. import java.util.ResourceBundle;  
  5.   
  6. import javax.security.auth.callback.Callback;  
  7. import javax.security.auth.callback.CallbackHandler;  
  8. import javax.security.auth.callback.UnsupportedCallbackException;  
  9.   
  10. import org.apache.ws.security.WSPasswordCallback;  
  11.   
  12. public class ServerPasswordCallback implements CallbackHandler {  
  13.   
  14.     private static final String BUNDLE_LOCATION = "com.mms.webservice.test.pass";  
  15.     private static final String PASSWORD_PROPERTY_NAME = "auth.manager.password";  
  16.   
  17.     private static String password;  
  18.     static {  
  19.         final ResourceBundle bundle = ResourceBundle.getBundle(BUNDLE_LOCATION);  
  20.         password = bundle.getString(PASSWORD_PROPERTY_NAME);  
  21.     }  
  22.   
  23.     public void handle(Callback[] callbacks) throws IOException,  
  24.             UnsupportedCallbackException {  
  25.   
  26.         WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];  
  27.   
  28.         // Set the password on the callback. This will be compared to the   
  29.         // password which was sent from the client.   
  30.         // We can call pc.getIdentifer() right here to check the username   
  31.         // if we want each client to have it's own password.   
  32.         if (pc.getIdentifer().equalsIgnoreCase("eric")) {  
  33.             if (!pc.getPassword().equals(password)) {  
  34.                 throw new SecurityException("wrong password");  
  35.             }  
  36.         }  
  37.         else  
  38.         {  
  39.             throw new SecurityException("the user does not exits");  
  40.         }  
  41.   
  42.     }  
  43.   
  44. }  

就此server端的验证就全部ok了。这时再调用原来的调用程序就会报ws_security错误了。

下面给出Client验证程序
其实就是在soapheader上加相应内容。也需要用到inInterceptors
Java代码 复制代码
  1. /**  
  2.  * Licensed to the Apache Software Foundation (ASF) under one  
  3.  * or more contributor license agreements. See the NOTICE file  
  4.  * distributed with this work for additional information  
  5.  * regarding copyright ownership. The ASF licenses this file  
  6.  * to you under the Apache License, Version 2.0 (the  
  7.  * "License"); you may not use this file except in compliance  
  8.  * with the License. You may obtain a copy of the License at  
  9.  *  
  10.  * http://www.apache.org/licenses/LICENSE-2.0  
  11.  *  
  12.  * Unless required by applicable law or agreed to in writing,  
  13.  * software distributed under the License is distributed on an  
  14.  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY  
  15.  * KIND, either express or implied. See the License for the  
  16.  * specific language governing permissions and limitations  
  17.  * under the License.  
  18.  */  
  19. package com.tnt.mms.webservice.client;   
  20.   
  21. import java.util.List;   
  22.   
  23. import org.springframework.context.support.ClassPathXmlApplicationContext;   
  24.   
  25. import com.tnt.mms.webservice.VendorMaintenance;   
  26. import com.tnt.mrm.model.other.Vendor;   
  27.   
  28. public final class ClientVendor {   
  29.   
  30.     private ClientVendor() {   
  31.     }   
  32.   
  33.     public static void main(String args[]) throws Exception {   
  34.         // START SNIPPET: client   
  35.         ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(   
  36.                 new String[] { "com/tnt/mms/webservice/client/client-vendor-beans.xml" });   
  37.   
  38.         try {   
  39.   
  40.             VendorMaintenance client = (VendorMaintenance) context   
  41.                     .getBean("client");   
  42.   
  43.             Vendor ls = client.get("10116");   
  44.             System.out.println("Response: " + ls.getEngName());   
  45.   
  46.             List<Vendor> rs = client.getList();   
  47.             System.out.println("Response: " + rs.size());   
  48.             System.out.println("Response: " + rs.get(0).getEngName());   
  49.   
  50.             System.exit(0);   
  51.   
  52.         } catch (Exception e) {   
  53.   
  54.             e.printStackTrace();   
  55.             System.out.println("error" + e.getMessage());   
  56.   
  57.         }   
  58.     }   
  59. }  
  1. /** 
  2.  * Licensed to the Apache Software Foundation (ASF) under one 
  3.  * or more contributor license agreements. See the NOTICE file 
  4.  * distributed with this work for additional information 
  5.  * regarding copyright ownership. The ASF licenses this file 
  6.  * to you under the Apache License, Version 2.0 (the 
  7.  * "License"); you may not use this file except in compliance 
  8.  * with the License. You may obtain a copy of the License at 
  9.  * 
  10.  * http://www.apache.org/licenses/LICENSE-2.0 
  11.  * 
  12.  * Unless required by applicable law or agreed to in writing, 
  13.  * software distributed under the License is distributed on an 
  14.  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
  15.  * KIND, either express or implied. See the License for the 
  16.  * specific language governing permissions and limitations 
  17.  * under the License. 
  18.  */  
  19. package com.tnt.mms.webservice.client;  
  20.   
  21. import java.util.List;  
  22.   
  23. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  24.   
  25. import com.tnt.mms.webservice.VendorMaintenance;  
  26. import com.tnt.mrm.model.other.Vendor;  
  27.   
  28. public final class ClientVendor {  
  29.   
  30.     private ClientVendor() {  
  31.     }  
  32.   
  33.     public static void main(String args[]) throws Exception {  
  34.         // START SNIPPET: client   
  35.         ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(  
  36.                 new String[] { "com/tnt/mms/webservice/client/client-vendor-beans.xml" });  
  37.   
  38.         try {  
  39.   
  40.             VendorMaintenance client = (VendorMaintenance) context  
  41.                     .getBean("client");  
  42.   
  43.             Vendor ls = client.get("10116");  
  44.             System.out.println("Response: " + ls.getEngName());  
  45.   
  46.             List<Vendor> rs = client.getList();  
  47.             System.out.println("Response: " + rs.size());  
  48.             System.out.println("Response: " + rs.get(0).getEngName());  
  49.   
  50.             System.exit(0);  
  51.   
  52.         } catch (Exception e) {  
  53.   
  54.             e.printStackTrace();  
  55.             System.out.println("error" + e.getMessage());  
  56.   
  57.         }  
  58.     }  
  59. }  


client_vendor_beans.xml
Java代码 复制代码
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <!--   
  3.     Licensed to the Apache Software Foundation (ASF) under one   
  4.     or more contributor license agreements. See the NOTICE file   
  5.     distributed with this work for additional information   
  6.     regarding copyright ownership. The ASF licenses this file   
  7.     to you under the Apache License, Version 2.0 (the   
  8.     "License"); you may not use this file except in compliance   
  9.     with the License. You may obtain a copy of the License at   
  10.        
  11.     http://www.apache.org/licenses/LICENSE-2.0   
  12.        
  13.     Unless required by applicable law or agreed to in writing,   
  14.     software distributed under the License is distributed on an   
  15.     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY   
  16.     KIND, either express or implied. See the License for the   
  17.     specific language governing permissions and limitations   
  18.     under the License.   
  19. -->   
  20. <!-- START SNIPPET: beans -->   
  21. <beans xmlns="http://www.springframework.org/schema/beans"  
  22.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  23.     xmlns:jaxws="http://cxf.apache.org/jaxws"  
  24.     xsi:schemaLocation="   
  25. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd   
  26. http://cxf.apache.org/jaxws http://cxf.apache.org/schema/jaxws.xsd">   
  27.     <!-- Configure CXF to use Aegis data binding instead of JAXB -->   
  28.     <bean id="aegisBean"  
  29.         class="org.apache.cxf.aegis.databinding.AegisDatabinding"  
  30.         scope="prototype" />   
  31.     <bean id="jaxwsAndAegisServiceFactory"  
  32.         class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean"  
  33.         scope="prototype">   
  34.         <property name="dataBinding" ref="aegisBean" />   
  35.         <property name="serviceConfigurations">   
  36.             <list>   
  37.                 <bean   
  38.                     class="org.apache.cxf.jaxws.support.JaxWsServiceConfiguration" />   
  39.                 <bean   
  40.                     class="org.apache.cxf.aegis.databinding.AegisServiceConfiguration" />   
  41.                 <bean   
  42.                     class="org.apache.cxf.service.factory.DefaultServiceConfiguration" />   
  43.             </list>   
  44.         </property>   
  45.     </bean>   
  46.   
  47.     <bean id="client" class="com.mms.webservice.VendorMaintenance"  
  48.         factory-bean="clientFactory" factory-method="create" />   
  49.   
  50.     <bean id="clientFactory"  
  51.         class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">   
  52.         <property name="serviceClass"  
  53.             value="com.mms.webservice.VendorMaintenance" />   
  54.         <property name="address"  
  55.             value="http://localhost:8080/extjsmms/services/VendorMaintenance" />   
  56.         <!--     <property name="serviceFactory" ref="jaxwsAndAegisServiceFactory"/> -->   
  57.         <property name="inInterceptors">   
  58.             <list>   
  59.                 <ref bean="logIn" />   
  60.             </list>   
  61.         </property>   
  62.         <property name="outInterceptors">   
  63.             <list>   
  64.                 <ref bean="logOut" />   
  65.                 <ref bean="saajOut" />   
  66.                 <ref bean="wss4jOut" />   
  67.             </list>   
  68.         </property>   
  69.     </bean>   
  70.   
  71.   
  72.     <bean id="logIn"  
  73.         class="org.apache.cxf.interceptor.LoggingInInterceptor" />   
  74.     <bean id="logOut"  
  75.         class="org.apache.cxf.interceptor.LoggingOutInterceptor" />   
  76.     <bean id="saajOut"  
  77.         class="org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor" />   
  78.     <bean id="wss4jOut"  
  79.         class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor">   
  80.         <constructor-arg>   
  81.             <map>   
  82.                 <entry key="action" value="UsernameToken" />   
  83.                 <entry key="user" value="eric" />   
  84.                 <entry key="passwordType" value="PasswordText" />   
  85.                 <entry key="passwordCallbackClass"  
  86.                     value="com.mms.webservice.client.ClientPasswordCallback" />   
  87.             </map>   
  88.         </constructor-arg>   
  89.     </bean>   
  90. </beans>   
  91. <!-- END SNIPPET: beans -->  
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!--  
  3.     Licensed to the Apache Software Foundation (ASF) under one  
  4.     or more contributor license agreements. See the NOTICE file  
  5.     distributed with this work for additional information  
  6.     regarding copyright ownership. The ASF licenses this file  
  7.     to you under the Apache License, Version 2.0 (the  
  8.     "License"); you may not use this file except in compliance  
  9.     with the License. You may obtain a copy of the License at  
  10.       
  11.     http://www.apache.org/licenses/LICENSE-2.0   
  12.       
  13.     Unless required by applicable law or agreed to in writing,  
  14.     software distributed under the License is distributed on an  
  15.     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY  
  16.     KIND, either express or implied. See the License for the  
  17.     specific language governing permissions and limitations  
  18.     under the License.  
  19. -->  
  20. <!-- START SNIPPET: beans -->  
  21. <beans xmlns="http://www.springframework.org/schema/beans"  
  22.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  23.     xmlns:jaxws="http://cxf.apache.org/jaxws"  
  24.     xsi:schemaLocation="  
  25. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd   
  26. http://cxf.apache.org/jaxws http://cxf.apache.org/schema/jaxws.xsd">   
  27.     <!-- Configure CXF to use Aegis data binding instead of JAXB -->  
  28.     <bean id="aegisBean"  
  29.         class="org.apache.cxf.aegis.databinding.AegisDatabinding"  
  30.         scope="prototype" />  
  31.     <bean id="jaxwsAndAegisServiceFactory"  
  32.         class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean"  
  33.         scope="prototype">  
  34.         <property name="dataBinding" ref="aegisBean" />  
  35.         <property name="serviceConfigurations">  
  36.             <list>  
  37.                 <bean  
  38.                     class="org.apache.cxf.jaxws.support.JaxWsServiceConfiguration" />  
  39.                 <bean  
  40.                     class="org.apache.cxf.aegis.databinding.AegisServiceConfiguration" />  
  41.                 <bean  
  42.                     class="org.apache.cxf.service.factory.DefaultServiceConfiguration" />  
  43.             </list>  
  44.         </property>  
  45.     </bean>  
  46.   
  47.     <bean id="client" class="com.mms.webservice.VendorMaintenance"  
  48.         factory-bean="clientFactory" factory-method="create" />  
  49.   
  50.     <bean id="clientFactory"  
  51.         class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">  
  52.         <property name="serviceClass"  
  53.             value="com.mms.webservice.VendorMaintenance" />  
  54.         <property name="address"  
  55.             value="http://localhost:8080/extjsmms/services/VendorMaintenance" />  
  56.         <!--     <property name="serviceFactory" ref="jaxwsAndAegisServiceFactory"/> -->  
  57.         <property name="inInterceptors">  
  58.             <list>  
  59.                 <ref bean="logIn" />  
  60.             </list>  
  61.         </property>  
  62.         <property name="outInterceptors">  
  63.             <list>  
  64.                 <ref bean="logOut" />  
  65.                 <ref bean="saajOut" />  
  66.                 <ref bean="wss4jOut" />  
  67.             </list>  
  68.         </property>  
  69.     </bean>  
  70.   
  71.   
  72.     <bean id="logIn"  
  73.         class="org.apache.cxf.interceptor.LoggingInInterceptor" />  
  74.     <bean id="logOut"  
  75.         class="org.apache.cxf.interceptor.LoggingOutInterceptor" />  
  76.     <bean id="saajOut"  
  77.         class="org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor" />  
  78.     <bean id="wss4jOut"  
  79.         class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor">  
  80.         <constructor-arg>  
  81.             <map>  
  82.                 <entry key="action" value="UsernameToken" />  
  83.                 <entry key="user" value="eric" />  
  84.                 <entry key="passwordType" value="PasswordText" />  
  85.                 <entry key="passwordCallbackClass"  
  86.                     value="com.mms.webservice.client.ClientPasswordCallback" />  
  87.             </map>  
  88.         </constructor-arg>  
  89.     </bean>  
  90. </beans>  
  91. <!-- END SNIPPET: beans -->  

至此验证成功。


在我的资源中有一个关于这方面的demo,有需要的朋友可以去下来学习一下
地址:http://blog.csdn.net/cocojiji5/article/details/3564440

cxf ws_security

CXF的webService已经创建好,但没有安全可言,毕竟这是Internet服务呀。 CXF给了一个很完整的安全架构,但CXF给出的ws_security DEMO太复杂了,又是password ...
  • cocojiji5
  • cocojiji5
  • 2008年12月20日 15:43
  • 2800

CXF全接触(一) --- WS-Security的实现

参考本例前,请先阅读下面的2篇资料:http://blog.csdn.net/kunshan_shenbin/archive/2008/12/26/3613918.aspxhttp://blog.cs...
  • kunshan_shenbin
  • kunshan_shenbin
  • 2009年01月17日 15:58
  • 8594

通过Apache CXF采集数据时多线程请求的性能总结

1,简介  Apache CXF 是一个开放源代码框架,提供了用于方便地构建和开发 Web 服务的可靠基础架构。可以使用Apache CXF提供一些WebService服务。Apache CXF可...
  • weibin_6388
  • weibin_6388
  • 2016年03月29日 14:25
  • 1473

WebService之CXF框架

本文主要包括以下内容 ant工具的使用 利用cxf实现webservice cxf与spring整合 ajax访问webservice ant 工具1、为什么要用到ant这个工具呢?Ant做为一...
  • whuhan2013
  • whuhan2013
  • 2016年05月30日 13:33
  • 11302

CXF集成swagger

swagger是一套OpenAPI规范,用于生成restful api接口描述,便于使用者发现、开发及集成。   本文参考官方文档(http://cxf.apache.org/docs/swagger...
  • xupingxia315
  • xupingxia315
  • 2017年12月05日 16:11
  • 145

cxf添加身份认证

1、服务端配置,java部分 package com.huating.outinterface; import javax.xml.soap.SOAPException; import javax....
  • heqinghua217
  • heqinghua217
  • 2016年09月02日 16:41
  • 1330

(九) CXF 支持的数据类型

【1简介】       CXF 支持的转换类型            1. 当形参、返回值的类型是String 、基本数据类型时,CXF 可以轻松地处理            2. 当形参、返回值是J...
  • zgf19930504
  • zgf19930504
  • 2016年03月11日 10:46
  • 683

CXF提供Client调用WebService接口的方法

1、 JaxWsProxyFactoryBean     简介:调用方式采用了和RMI类似的机制,即客户端直接服务器端提供的服务接口(interface),CXF通过运行时代理生成远程服务的代理对象...
  • a128953ad
  • a128953ad
  • 2015年11月18日 12:03
  • 18928

CXF实战(一)

Apache CXF提供了用于方便地构建和开发WebService的可靠基础架构。它允许创建高性能和可扩展的服务,可以部署在Tomcat和基于Spring的轻量级容器中,也可以部署在更高级的服务器上,...
  • accountwcx
  • accountwcx
  • 2015年07月27日 11:23
  • 23575

WebService-CXF-jQuery跨域访问

通过JS来调用WebService: 通过jQuery的ajax方法向服务器发送xml数据。 必须要先了解xml的数据格式,通过拦截器获取。 •可以从LoggingInInterce...
  • u011417072
  • u011417072
  • 2014年05月16日 19:07
  • 1799
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:cxf ws_security
举报原因:
原因补充:

(最多只允许输入30个字)