SpringBoot与CXF整合创建WebService:密码验证拦截器

6 下载量 184 浏览量 更新于2024-08-28 收藏 109KB PDF 举报
"这篇教程介绍了如何在Spring Boot项目中整合Web Service,特别是使用CXF框架来创建一个基于WSDL的服务。在Spring Boot 2.2.6及以上版本与CXF 3.2.4或3.2.5版本存在兼容性问题,因此需要将Spring Boot版本降级至2.1.2或更低。为了实现企业级的安全需求,教程展示了如何通过自定义拦截器来处理客户端的密码验证。" 在本文中,我们将深入探讨Spring Boot与CXF的整合,以创建一个基于WSDL的Web服务。首先,由于Spring Boot 2.2.6及以上版本与CXF的某些版本存在不兼容性,我们需选择合适的依赖版本。在本例中,Spring Boot的版本被设置为2.1.2,同时引入了CXF的`cxf-spring-boot-starter-jaxws`模块,版本为3.2.5。此外,为了支持JSON解析,还引入了`json-lib`和`gson`库,以及用于测试的`spring-boot-starter-test`和`junit-vintage-engine`。 配置文件(`application.properties`)是定义Web服务访问关键信息的地方。在这个例子中,我们需要设置访问用户名(`webservices.username`)、密码(`webservices.password`)、访问路径前缀(`webservices.service.prefix`,默认为/mySoap)和Web服务的终端路径(`webservices.service.endpoint`)。这些参数将用于验证和定位服务。 为了从配置文件中读取这些属性,我们需要创建一个名为`Properties`的Spring Bean。这个类利用Spring的`@Value`注解来注入属性值,使得在程序中可以方便地访问这些配置。 接下来,我们将讨论如何通过自定义拦截器实现客户端的密码验证。在CXF中,拦截器可以用来在消息发送或接收时执行特定操作。在本场景中,我们可以创建一个拦截器,它在客户端调用服务之前检查传递的凭证是否有效。拦截器是JAX-WS的一部分,但JAX-RS的实现也提供类似的功能,不过那是另一个主题。 自定义拦截器通常需要实现`javax.xml.ws.handler.soap.SOAPHandler<SOAPMessageContext>`接口,并覆盖其`handleMessage`方法。在这个方法里,我们可以提取请求中的认证信息并与存储的凭据进行比较。如果验证失败,拦截器可以阻止请求继续,从而实现安全控制。 这个案例展示了Spring Boot如何与CXF结合,创建一个安全的、基于WSDL的Web服务。通过合理配置和自定义拦截器,我们可以实现企业级的身份验证机制,确保只有经过授权的客户端才能访问服务。这样的解决方案对于需要远程调用的复杂系统特别有用,因为它们提供了可扩展性和灵活性。
2012-03-06 上传
package com.xfire.core.client; import java.net.MalformedURLException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.codehaus.xfire.client.XFireProxyFactory; import org.codehaus.xfire.service.Service; import org.codehaus.xfire.service.binding.ObjectServiceFactory; import com.xfire.core.entity.UserInfo; import com.xfire.core.service.IUserInfoService; /** *@author jilongliang *@Date 2012-3-5 * */ public class UserInfoClient { public static void main(String[] args) { getServiceList(); setServiceList(); } static String url = "http://localhost:8081/xfire/services/UserInfo"; /** * */ public static void getServiceList() { Service service = new ObjectServiceFactory() .create(IUserInfoService.class); try { IUserInfoService iAddressService = (IUserInfoService) new XFireProxyFactory() .create(service, url); List list = (ArrayList) iAddressService .getAddressList(); System.out.println("一共多少条数据:" + list.size()); for (Iterator iter = list.iterator(); iter.hasNext();) { UserInfo a = iter.next(); System.out.println(a); } } catch (MalformedURLException e) { e.printStackTrace(); } } public static void setServiceList() { Service service = new ObjectServiceFactory() .create(IUserInfoService.class); try { IUserInfoService iAddressService = (IUserInfoService) new XFireProxyFactory() .create(service, url); List listAdd = new ArrayList(); UserInfo address = new UserInfo(); address.setIdentifier(1); address.setCountry("中國"); address.setProivice("廣東省"); address.setCity("陽江"); address.setAddress("廣東陽春"); address.setPostCode("1111111"); address.setExist(false); address.setArrary(new String[] { "22", "23", "24" }); listAdd.add(address); address.setIdentifier(2); address.setCountry("中國"); address.setProivice("廣東省"); address.setCity("陽江"); address.setAddress(