在Apache CXF中,当你需要调用一个带有用户名和密码的Web服务接口时,你可以使用`UsernameToken`来处理认证。以下是一个简单的示例,展示了如何在CXF客户端中配置和使用`UsernameToken`。首先,你需要定义一个服务接口和客户端
摘要:CXF中 the namespace on the 'definitions' element, is not a valid SOAP version报错!
对方提供的地址如下:
String hisApiUrl= "http://172.16.10.100:8000/WebServiceGate.cls?WSDL=1&CacheUserName=vipsoft&CachePassword=vipsoft&CacheNoRedirect=1"
使用时去掉后面的参数: http://172.16.10.100:8000/WebServiceGate.cls
CXF中 the namespace on the "definitions" element, is not a valid SOAP version报错!
http://172.16.0.1:8000/WebServiceGate.cls?WSDL 将地址中的 ?WSDL 去掉
SoapUI
工具调试时,需要在属性里配置 用户名、密码、密码类型
Java
Java代码中需要相应的认证配置
CXF WebService 授权&动态调用 : https://www.cnblogs.com/vipsoft/p/14994471.html
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-core</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-ws-security</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.wss4j</groupId>
<artifactId>wss4j-ws-security-dom</artifactId>
<version>2.2.4</version>
</dependency>
String hisApiUrl="http://172.16.10.100:8000/WebServiceGate.cls";
//创建动态客户端
JaxWsDynamicClientFactory factory = JaxWsDynamicClientFactory.newInstance();
Client client = factory.createClient(hisApiUrl);
// 配置WSS认证 - 使用真正的用户名密码
Map<String, Object> outProps = new HashMap<>();
outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);
outProps.put(WSHandlerConstants.USER, "用户名"); // 替换为SoapUI中使用的用户名
outProps.put(WSHandlerConstants.PASSWORD_TYPE, "PasswordText");
// 使用内联 CallbackHandler 设置密码
outProps.put(WSHandlerCons
