2015-11-06 110 views
0

我试图使用java.But adal4j库我必须通过proxy.Following连接到连接Azure是ADAL4j Java代理问题

String url = "https://login.microsoftonline.com/tenant_id/oauth2/authorize"; 
      authContext = new AuthenticationContext(url,false, 
                service); 
    Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("proxyhostname", 443)); 
    authContext.setProxy(proxy); 
    ClientCredential clientCred = new ClientCredential(XXXX, xxxx); 
    Future<AuthenticationResult> future = authContext.acquireToken(             
                   clientCred, 
                   null); 
    authResult = future.get(); 

而且我有

  System.setProperty("http.proxyPort", "80"); 
      System.setProperty("http.proxyUser", "xxxx"); 
      System.setProperty("http.proxyPassword", "xxxx"); 
      System.setProperty("http.proxyHost", "xxxxxxx"); 
试图将代码段

而且所有的时间我得到这个下面的错误

the error is.....java.net.ConnectException: Connection timed out: connect 
java.util.concurrent.ExecutionException: java.net.ConnectException: Connection timed out: connect 
    at java.util.concurrent.FutureTask.report(FutureTask.java:122) 
    at java.util.concurrent.FutureTask.get(FutureTask.java:188) 
    at com.toyota.eap.auth.Test.main(Test.java:76) 
Caused by: java.net.ConnectException: Connection timed out: connect 

注:此错误是,只有当我们拥有代理在办公室内。从办公室外面如果我跑这个节目,没有问题。

任何想到这一点。

感谢

+0

对于通过Java代理访问AAD,可以查看http://stackoverflow.com/questions/32522773/adal-for-java-proxy/32558897。同时,请使用Proxy检查办公室网络,并确保它可用且有效。 –

回答

0

有中存在的线程来回答这个问题的java.net.ConnectException: Connection timed out使用Adal4j与代理。请查看ADAL for Java ProxyJava proxy issues - Connection Timed OutHow do I make HttpURLConnection use a proxy?

欲了解更多详情,您可以使用URLConnection类(参见http://docs.oracle.com/javase/1.5.0/docs/api/java/net/URLConnection.html)来解决它的功能setConnectTimeout,看到的画面和下面的代码:

enter image description here

String url = "<url_link for http or https>"; 
int timeout = 30*1000; // 30 seconds 
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("<proxy_host>", <proxy_port>)); 
// if need to auth for proxy 
Authenticator authenticator = new Authenticator() { 
    public PasswordAuthentication getPasswordAuthentication() { 
     return (new PasswordAuthentication("<user>", 
      "<password>".toCharArray())); 
    } 
}; 
Authenticator.setDefault(authenticator); 
// open connection using proxy directly for this connection 
// if not, setting in the JVM startup argus or using System.setProperty for app global scope 
HttpURLConnection conn = new URL(url).openConnection(proxy); // Also HttpsURLConnection 
conn.setConnectTimeout(timeout); // set Timeout 

同时,根据我的经验,如果代理IP和端口位于承诺网络环境中,则可以在本地环境中使用它,但在Azure上失败。从这个角度来看,我认为你应该首先确认代理是有效的承诺和Azure。

如果连接可以连接并需要很长时间,则将连接超时属性设置为我上面的参考很有用。