在Java中抑制NTLM身份验证

在Java中抑制NTLM身份验证,java,ntlm,urlconnection,Java,Ntlm,Urlconnection,我目前正在笔试一个web应用程序,遇到了一个有趣的现象。在测试过程中,我使用代理收集URL。现在我想测试我的URL列表是否可以匿名访问,所以我编写了这个小工具 public static void main(String[] args) { try { TrustAllCerts.disableCertChecks(); FileReader fr = new FileReader(new File("urls.txt")); Bu

我目前正在笔试一个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身份验证?这对我来说是一个很坏的陷阱。

我认为这是最好的资源。设置http.auth.preference=“basic”应该可以满足您的需要。假设你不需要消化什么的。我不确定你是否可以超越这一点来禁用NTLM

另一个要考虑的是其他java HTTP客户端实现,比如Apache或谷歌的

< P>我认为这是最好的资源。设置http.auth.preference=“basic”应该可以满足您的需要。假设你不需要消化什么的。我不确定你是否可以超越这一点来禁用NTLM


另一个要考虑的是其他java HTTP客户端实现,比如Apache或谷歌的

< P>我不确定这会有帮助,但我被相反的方式绊倒了。 我希望进行NTLM验证,所以在我的本地机器上,我使用了一个名为CNTLM的免费应用程序。它是一个本地代理服务器,将转发(和NT身份验证)传入的请求。适用于无法使用NTLM代理的应用程序


对不起,我知道这没有回答你的问题,但也许这对其他人有帮助!:)

我不确定这是否有帮助,但我被相反的情况难住了

我希望进行NTLM验证,所以在我的本地机器上,我使用了一个名为CNTLM的免费应用程序。它是一个本地代理服务器,将转发(和NT身份验证)传入的请求。适用于无法使用NTLM代理的应用程序


对不起,我知道这没有回答你的问题,但也许这对其他人有帮助!:)

嗨,谢谢你的快速回复。我刚刚测试了设置-不幸的是,它没有解决我的问题。不过,非常感谢!我想我需要用Apache-中的HttpClient替换URLConnection。我想绕开这一点,因为当前的解决方案非常快速和肮脏:)谢谢你的努力!嗨,谢谢你的快速回复。我刚刚测试了设置-不幸的是,它没有解决我的问题。不过,非常感谢!我想我需要用Apache-中的HttpClient替换URLConnection。我想绕开这一点,因为当前的解决方案非常快速和肮脏:)谢谢你的努力!嘿,我在这里使用Windows7和JRE 1.6.0.22,而NTLM(不幸的)工作起来很有魅力。你可以试着用我上面截取的代码。。。也许这能帮你省点麻烦!我在这里要补充第三点经验。我在Mac OS X上,Java看起来确实在使用NTLM进行响应,但服务器拒绝响应,然后提供NTLM和Basic作为替代方案,这当然会导致无限循环。必须热爱微软对网络标准的遵守:(嘿,我在这里使用Windows7和JRE 1.6.0.22以及NTLM works(很不幸)就像一个魅力。你可以尝试使用我上面截取的代码…也许这可以帮你省去一些麻烦!我在这里有第三个经验要补充。我在Mac OS X上,Java似乎使用NTLM进行回复,但服务器拒绝响应,然后提供NTLM和Basic作为替代方案,这当然会导致无限循环。我一定喜欢微软的adher符合网络标准:(