当HttpURLConnection命中401时,如何避免JVM打开auth窗口

时间:2011-08-29 21:46:59

标签: java httpurlconnection basic-authentication

我正在使用java.net.HttpURLConnection,当HTTP服务器返回401响应代码时,它会烦人地提出一个询问用户名和密码的窗口。

如何摆脱这种自动身份验证对话框?我想自己处理401s。

我尝试setAllowUserInteraction(false),但似乎没有效果。

2 个答案:

答案 0 :(得分:2)

弹出窗口来自默认身份验证器。要删除弹出窗口,您可以插入自己的身份验证器。见How to handle HTTP authentication using HttpURLConnection?

答案 1 :(得分:1)

@mdma's answer是正确的,您可以插入自己的Authenticator来处理身份验证,这样就没有弹出窗口。

如果您已经以其他方式处理身份验证(例如connection.setRequestProperty("Authorization", ...)this answer to another question描述),则可以使用Authenticator.setDefault()选择而不是使用任何Authenticator进行身份验证:

Authenticator.setDefault(null);

这会删除旧的默认Authenticator,因此如果您的身份验证错误,您可以通过URLConnection获取错误响应代码,而无需打开任何弹出窗口。

等效方法是将默认值设置为Authenticator,为null返回getPasswordAuthentication()(这是默认实现),如下面的代码所示:

Authenticator.setDefault(new Authenticator() { });

但除非您要向Authenticator添加代码,否则我认为没有理由选择此null