cxf实现的ws_client(带安全验证)

使用Apache CXF 3.0.9和JDK6.0开发环境中,创建了一个带有安全验证的Web服务客户端。通过wsdl2java工具生成Java代码时,因JDK6仅支持ws2.1规范,故需添加'-frontend jaxws21'参数。同时,为处理中文注释,需要指定'-encoding utf-8'。客户端实现涉及密码回调功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发环境: apache-cxf-3.0.9 + jdk6.0

客户端java代码生成:

wsdl2java + wsdlfile

问题描述

jdk6最高支持ws2.1规范版本,在jdk6下生成wsdl2java后要加上-frontend jaxws21
java类中含有中文注释,wsdl2java后要加上-encoding utf-8

客户端代码
package com.ws.client;

import java.util.HashMap;
import java.util.Map;

import org.apache.cxf.endpoint.Client;
import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor;
import org.apache.wss4j.dom.WSConstants;
import org.apache.wss4j.dom.handler.WSHandlerConstants;

import com.ws.service.IWSCall;
import com.ws.service.WSCallImplService;

public class WSCli {

	private static void client(){
		
		//获取服务接口
		WSCallImplService factory = new WSCallImplService();
		IWSCall wsCall = factory.getWSCallImplPort();		
		//配置验证信息
		Client client = ClientProxy.getClient(wsCall);
        Map<String, Object> outProps = new HashMap<String, Object>();
		outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);
		outProps.put(WSHandlerConstants.USER, "admin");
		outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);
		outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS, ClientPwdCallback.class.getName());
		client.getOutInterceptors().add(new WSS4JOutInterceptor(outProps));  
		//调用服务
		String result = wsCall.call("ketty");
		System.out.println(result);
	}
	
	public static void main(String[] args) {
		client();
	}
}

客户端密码回调

package com.ws.client;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

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;

public class ClientPwdCallback implements CallbackHandler 
{
	private Map<String,String> manager = new HashMap<String,String>();

	public ClientPwdCallback()
	{
		manager.put("admin", "123");
		manager.put("test", "test");
	}
	
	public void handle(Callback[] callbacks) throws IOException,
			UnsupportedCallbackException 
	{
		for(int i=0;i<callbacks.length;i++)
		{
			WSPasswordCallback pc = (WSPasswordCallback)callbacks[i];
			String identifier = pc.getIdentifier();
			int usage = pc.getUsage();
			if (usage == WSPasswordCallback.USERNAME_TOKEN) 
			{
				if(!manager.containsKey(identifier))
					throw new SecurityException("Username not exist");
				pc.setPassword(manager.get(identifier));				
			}			 
		}		
	}
}
依赖jar包


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值