我正在使用java.net.HttpURLConnection
,当HTTP服务器返回401响应代码时,它会烦人地提出一个询问用户名和密码的窗口。
如何摆脱这种自动身份验证对话框?我想自己处理401s。
我尝试setAllowUserInteraction(false)
,但似乎没有效果。
答案 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
。