在Java中抑制NTLM身份验证
我目前正在笔试一个web应用程序,遇到了一个有趣的现象。在测试过程中,我使用代理收集URL。现在我想测试我的URL列表是否可以匿名访问,所以我编写了这个小工具在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
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符合网络标准:(