簡體   English   中英

在Java中禁止NTLM Auth

[英]Suppress NTLM Auth in Java

我目前正在測試Web應用程序,並遇到了一個有趣的現象。 在測試期間,我使用代理收集了URL。 現在我想測試我的URL列表以進行匿名訪問,所以我寫了這個小工具

    public static void main(String[] args) {
    try {
        TrustAllCerts.disableCertChecks();
        FileReader fr = new FileReader(new File("urls.txt"));
        BufferedReader br = new BufferedReader(fr);

        String urlStr = br.readLine();
        while (urlStr != null) {
            if (urlStr.trim().length() > 0) {
                URL url = new URL(urlStr);

                HttpsURLConnection urlc = (HttpsURLConnection) url.openConnection();
                urlc.connect();
                if (urlc.getResponseCode() == HttpURLConnection.HTTP_OK) {
                    System.out.println(urlStr);

                } else {
                    System.out.println("["+urlc.getResponseCode()+"] "+urlStr);
                }
                urlc.disconnect();
            }
            urlStr = br.readLine();
        }
        br.close();

    } catch (Exception e) {
        e.printStackTrace();
    }
}

它基本上什么也沒做,只是在給定的URL上打開URL連接並測試HTTP響應代碼(實際上,如果要重定向到登錄頁面,我還進行了更多測試)。 但是,問題是,此特定應用程序(某些自定義MS SQL Server Reporting Services)配置為使用NTLM WWW身份驗證。 如果嘗試使用Firefox訪問某些URL,則會收到401未經授權+登錄dlg。 Internet Exploder在后台執行NTLM身份驗證並授予訪問權限。 似乎Java URLConnection(或URL)類做了相同的事情,因為我沒有得到401。有沒有辦法在Java中禁用隱式NTLM身份驗證? 對我來說這是一個嚴重的陷阱。

我認為Java網絡文檔是最好的資源。 設置http.auth.preference="basic"應該可以為您提供所需的信息。 假設您不需要摘要或其他內容。 我不確定是否可以禁用NTLM。

要考慮的另一件事是其他Java HTTP客戶端實現,例如Apache或Google的實現。

我不確定這是否會有所幫助,但事實卻恰恰相反。

希望進行 NTLM身份驗證,因此在本地計算機上,我使用了一個名為CNTLM的免費應用程序。 這是一個本地代理服務器,將轉發(和NT身份驗證)傳入的請求。 適用於無法使用NTLM代理的應用程序。

抱歉,我知道這不能回答您的問題,但是也許對那里的人有幫助! :)

暫無
暫無

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

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