对于Webservice SOAP请求中,需要进行Basic认证和动态获取用户名密码办法

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.net.Authenticator;
import java.net.PasswordAuthentication;

/**
 * @author lihuaiyu
 * @date 2018/1/15
 * Email : [email protected]
 * QQ : 284067520
 */
public class BaseClient {
    private static final Logger logger = LoggerFactory.getLogger(BaseClient.class);

    static class MyAuthenticator extends Authenticator {

        public PasswordAuthentication getPasswordAuthentication() {
            logger.info("获取URL连接用户名密码,路径:" + super.getRequestingURL().toString());
            //这里来进行url判断,父类中有很多获取请求相关数据方法,合理利用
            if (super.getRequestingURL().toString().indexOf("http://127.0.0.1/test?wsdl") {
                
                return ("username","password".toCharArray()));
            } else if (super.getRequestingURL().toString().indexOf("http://127.0.0.2/test1?wsdl") {
             
              return ("username","password".toCharArray()));
} return null; } }
     public static void main(String[] args) throws IOException {
        //使用Autherticator设置全局默认认证对象
        Authenticator.setDefault(new MyAuthenticator());
        //请求wsdl资源或者是endpoint地址。这里两个不同ip请求就可以使用不同用户名密码登录了,尽量不要使用cxf客户端进行请求,Basic认证没问题,但是NTLM认证方式就会不行,尤其是微软的产品,真是难用
        //在请求url时,第一次都是匿名访问,让服务端返回401时,会自动调用getPasswordAuthentication方法获取到用户名密码
        //注意setDefault只能生效一个,意味着java运行环境下只有一个认证对象有效,所以只能重写获取PasswordAuthentication对象的地方做逻辑判断才能请求不同的basic认证的系统
        URL url = new URL("http://127.0.0.1/test?wsdl");
        URL url1 = new URL("http://127.0.0.2/test1?wsdl");
        url.getContent();
        url1.getContent();
     }
}
 
 

你可能感兴趣的:(java)