从浏览器访问一个诸如 http://www.lombard.com/cgi-bin/Quotes/quote 这样的 URL 不成问题,因为您自己可以提供用户名和口令。但是当您试图通过 Java 程序从与此 URL 相关的 InputStream
中读取数据时,该 Java 程序就会发出 FileNotFoundException
异常。
在 Java 1.0 或 1.1 中,您可以通过在连接时记入 (post) 适当的认证字符串来避免这种情况,但这种方法仅在您事先知道该 URL 是受保护的时才奏效。(Authorization: Basic username:password
,其中基本认证域是以 base 64 编码的。)如果您事先没有预见到文档是受保护的,则您甚至无法读取文件内容。(有关用 Java 1.1 applet 或应用程序访问口令保护的 URL 的解决方案,请参阅“Java 技巧 47:再谈 URL 认证”。值得庆幸的是,Java 1.2 在 java.net
包中添加了一个 Authenticator
类,这使得访问口令保护的 URL 变得极为容易。
现在,对于 Java 1.2,您只需用 Authenticator.setDefault()
安装一个 Authenticator
。这样,当需要认证时,已安装的 Authenticator
的 getPasswordAuthentication()
方法就会被调用,然后您就可以用适当的用户名和口令来设置 PasswordAuthentication
实例。就这么简单。
所需步骤如下所示。
第一步:安装 Authenticator
Authenticator.setDefault (new MyAuthenticator ());
第二步:创建 Authenticator 的子类
class MyAuthenticator extends Authenticator {
protected PasswordAuthent