簡體   English   中英

J2SE代理驗證

[英]J2SE Proxy Authentication

我們使用2 SIMILAR Microsoft ISA Proxy Server 2003連接到Internet。 每個代理具有不同的登錄樣式,如下所示:

Server-1:nt-domain \\ alan Server-2:alan@love-u.com

通過Wifi登錄IE,Firefox和我的Phonecell都很好。 但是,當我們運行java應用程序J2SE Ver 4,5和6時,會出現一個問題,它需要進行Internet身份驗證。 登錄到Server-2是正常的,但是對於Server-2,則為FAIL(樣式:alan@domain.com)。

注意:使用Windows身份驗證看到的兩個代理都鍵入:negotiate NTLM

如果您可以提供幫助或任何建議,請接受。

謝謝,

艾倫L.

java文檔描述了如何在java中啟用NTLM身份驗證。 如果您有權訪問源,則可以按照“代理”文章中的描述以編程方式添加系統屬性,添加如下內容(另請參見axis2的討論 ):

System.setProperty("http.auth.ntlm.domain", mydomain);

如果您無權訪問源,則可以在啟動Java二進制文件的命令行上設置屬性,添加如下內容:

java -DproxyHost=host  -DproxyPort=8080  -Dhttp.auth.ntlm.domain=mydomain  ...

有一些很好的庫可以幫助您克服這個問題。 Proxy Vole (Java的網絡代理自動檢測)可以幫助您使用與Internet Explorer相同的代理設置通過代理進行身份驗證。

要為Java應用程序提供開箱即用的網絡連接,您可以使用Proxy-Vole庫。 它提供了一些自動檢測當前代理設置的策略。 有許多可配置的策略可供選擇。 目前,Proxy-Vole支持以下代理檢測策略。

  • 讀取平台設置(支持:Windows,KDE,Gnome)
  • 讀取瀏覽器設置(支持:Firefox 3.x,Internet Explorer)
  • 讀取環境變量(Linux / Unix服務器系統上經常使用的變量)
  • 使用WPAD / PAC自動檢測腳本(僅支持某些功能)

你在運行應用程序或applet嗎? applet可以依賴瀏覽器的代理身份驗證機制。

我建議先使用cURL連接代理,然后查看發生的握手。 代理服務器將為客戶端提供身份驗證方法列表。

如果用戶和密碼已修復,您有時可以從瀏覽器會話中取出標頭,並在代碼中使用它。 例如,我可以將此標頭添加到請求中,代理會將我視為已通過身份驗證:

Proxy-Authorization: Basic AbCdEfGhOjk==

使用apache-commons httpClient(版本3),我有以下代碼。 它沒有經過良好的測試(如果它完全沒有),但我認為它曾經工作過一次.. :)這是為了你可以修改程序..如果它們是一些第三方包,你無能為力。


String proxyHost = System.getProperty("https.proxyHost");
                int proxyPort = 0;
                try {
                    proxyPort = Integer.parseInt(System
                            .getProperty("https.proxyPort"));
                } catch (Exception ex) {
                    //
                }

            System.setProperty("java.net.useSystemProxies", "true");

            ProxySelector ps = ProxySelector.getDefault();
            List<Proxy> proxyList = ps.select(new URI(targetUrl));
            Proxy proxy = proxyList.get(0);
            if (proxy != null) {
                InetSocketAddress addr = ((InetSocketAddress) proxy
                        .address());
                if (addr != null) {
                    proxyHost = addr.getHostName();
                    proxyPort = addr.getPort();
                }
            }

            boolean useProxy = proxyHost != null && proxyHost.length() > 0;

            if (useProxy) {
                httpClient.getHostConfiguration().setProxy(proxyHost,
                        proxyPort);
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM