cxf动态调用web service时添加basic验证

package com.example.demo;

import org.apache.cxf.Bus;
import org.apache.cxf.BusFactory;
import org.apache.cxf.configuration.security.AuthorizationPolicy;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import org.apache.cxf.transport.http.HTTPConduitConfigurer;
import org.apache.cxf.transport.http.auth.DefaultBasicAuthSupplier;
import org.apache.cxf.transport.http.auth.HttpAuthSupplier;

import java.io.IOException;

/**
 * @ClassName: CxfClient
 * @Author: bo
 * @Description:
 * @Date: 2020/11/20 13:09
 * @Version: 1.0
 */
public class CxfClient {

    private static String url = ""; // wsdl访问路径
    private static String method = ""; // 方法名
    private static ASN objects = null; //访问参数
    private static String username = null; //用户名
    private static String password= null; //密码
    public static void main(String[] args) {

        Bus bus = BusFactory.getThreadDefaultBus();
        bus.setExtension((name, address, httpConduit) -> {
            final AuthorizationPolicy authorization = new AuthorizationPolicy();
            authorization.setUserName(username);
            authorization.setPassword(password);
            httpConduit.setAuthorization(authorization);
            final HttpAuthSupplier supplier = new DefaultBasicAuthSupplier();
            httpConduit.setAuthSupplier(supplier);
        }, HTTPConduitConfigurer.class);


        JaxWsDynamicClientFactory factory = JaxWsDynamicClientFactory.newInstance(bus);

        Client client = factory.createClient(url);
      
        System.out.println("动态客户端创建完成");

        try {
            Object[] invoke = client.invoke(method, objects);
            System.out.println(invoke[0]);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

 

posted @ 2020-11-27 14:41  BoyBo  阅读(606)  评论(0)    收藏  举报