91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用 Java 1.2 的 Authenticator 類 (轉)

發布時間:2020-08-16 02:25:42 來源:ITPUB博客 閱讀:282 作者:worldblog 欄目:編程語言
使用 Java 1.2 的 Authenticator 類 (轉)[@more@]當您用喜好的瀏覽器在網上沖浪時,您會遇到要求代理服務器認證或 HTTP 服務器認證的 URL,并會出現您再熟悉不過的窗口要求您輸入用戶名及口令:

從瀏覽器訪問一個諸如 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 的解決方案,請參閱“tips/tip047/index.shtml">Java 技巧 47:再談 URL 認證”。值得慶幸的是,Java 1.2 在 java.NET 包中添加了一個 Authenticator 類,這使得訪問口令保護的 URL 變得極為容易。

現在,對于 Java 1.2,您只需用 Authenticator.setDefault() 安裝一個 Authenticator。這樣,當需要認證時,已安裝的 AuthenticatorgetPasswordAuthentication() 方法就會被調用,然后您就可以用適當的用戶名和口令來設置 PasswordAuthentication 實例。就這么簡單。

所需步驟如下所示。

第一步:安裝 Authenticator

Authenticator.setDefault (new MyAuthenticator ());

第二步:創建 Authenticator 的子類

class MyAuthenticator extends Authenticator {
 protected PasswordAuthentication getPasswordAuthentication() {
 return new PasswordAuthentication ("username", "password");
 }
}

以下程序完整地顯示了這種行為,它提供了自己的認證提示對話框。

import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;

public class URLPassword extends Frame {

 private TextField tf = new TextField();
 private TextArea ta = new TextArea();

 public URLPassword() {

 super ("URL Password");

 // 安裝 Authenticator
 Authenticator.setDefault (new MyAuthenticator ());

 // 設置屏幕
 add (tf, BorderLayout.NORTH);
 ta.setEditable(false);
 add (ta, BorderLayout.CENTER);
 tf.addActionListener (new ActionListener() {
 public void actionPerformed (ActionEvent e) {
 String s = tf.getText();
 if (s.length() != 0)
 ta.setText (fetchURL (s));
 }
 });
 addWindowListener (new WindowAdapter() {
 public void windowClosing (WindowEvent e) {
 dispose();
 System.exit(0);
 }
 });
 }

 private String fetchURL (String urlString) {
 StringWriter sw = new StringWriter();
 PrintWriter pw = new PrintWriter(sw);

 try {
 URL url = new URL (urlString);
 InputStream content = (InputStream)url.getContent();
 BufferedReader in =
 new BufferedReader (new InputStreamReader (content));
 String line;
 while ((line = in.readLine()) != null) {
 pw.println (line);
 }
 } catch (MalformedURLException e) {
 pw.println ("Invalid URL");
 } catch (IOException e) {
 pw.println ("Error reading URL");
 }
 return sw.toString();
 }

 public static void main (String args[]) {
 Frame f = new URLPassword();
 f.setSize(300, 300);
 f.setVisible (true);
 }

 class MyAuthenticator extends Authenticator {
 protected PasswordAuthentication getPasswordAuthentication() {
 final Dialog jd = new Dialog (URLPassword.this, "Enter password", true);
 jd.setLayout (new GridLayout (0, 1));
 Label jl = new Label (getRequestingPrompt());
 jd.add (jl);
 TextField username = new TextField();
 username.setBackground (Color.lightGray);
 jd.add (username);
 TextField password = new TextField();
 password.setEchoChar ('*');
 password.setBackground (Color.lightGray);
 jd.add (password);
 Button jb = new Button ("OK");
 jd.add (jb);
 jb.addActionListener (new ActionListener() {
 public void actionPerformed (ActionEvent e) {
 jd.dispose();
 }
 });
 jd.pack();
 jd.setVisible(true);
 return new PasswordAuthentication (username.getText(), password.getText());
 }
 }
}

 后續技巧!   來自 Luis Blanco Gomez

代碼的第 85 行(MyAuthenticator 類的返回參數)顯示一個錯誤:

return new PasswordAuthentication (username.getText(), password.getText());

編譯器將報錯:

URLPass.java:88: Incompatible type for constructor. Can't convert
java.lang.String to char[].
 return new PasswordAuthentication ( username.getText(), password.getText());

為修正此錯誤,您必須聲明一個 String 變量來存儲 password.getText();例如,"String pass= password.getText();",并將返回行改為:

return new PasswordAuthentication ( username.getText(), pass.toCharArray());

為了測試這個程序,必須找出一個您知道其用戶名和口令的 URL。就 DiSCOver Brokerage Direct 而言,任何人都可以在 registration desk 獲得一個免費口令。接下來,用 URL http://www.lombard.com/cgi-bin/Quotes/quote 來測試該程序。

有幾點值得一提:不可信的 applet 可在 appletviewer 中安裝一個缺省的 Authenticator。HotJava、Navigator 和 Internet Explorer 會怎么做尚不清楚。如果您沒有必要的權限便試圖更改 authenticator,該程序就會發出一個 AccessControlException 異常。

提交您喜好的 Java 技巧
每篇技巧都將提供有關有用的技巧和竅門的幾則簡短信息,以幫助您改進 Java 代碼。我們將探究這一出色技術的諸多方面,每次討論一個 Java bean。

我們也希望將您的 Java 技巧刊登在以后的 Java world 上。趕快將您最棒的技巧和竅門寫出來并發送到 Mailto.cgi?javatips@javaworld.com+/javaworld/javatips/jw-javatips.index.html+javatip" name=javatip>javatips@javaworld.com。您可能會發現自己成了 JavaWorld 的一名作者,因為您的有益提示可能成為下一篇 Java 技巧!

作者簡介
john.zukowski John Zukowski 是 MageLang Institute 的一位軟件專家,他是 Java AWTReference(O'Reilly& Associates 出版)、Borland's JBuilder: No experience required(Sybex 出版)兩本書的作者,同時也是 Mining Company 的 Focus on Java 指南的作者。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长白| 台北县| 苍山县| 益阳市| 南木林县| 施秉县| 武城县| 宣武区| 且末县| 黄冈市| 二手房| 河南省| 中卫市| 修水县| 资兴市| 江津市| 柏乡县| 柳河县| 兴安县| 华容县| 浠水县| 寻乌县| 将乐县| 萍乡市| 建德市| 九龙城区| 汉沽区| 若羌县| 禹州市| 遂川县| 吕梁市| 青神县| 弋阳县| 定日县| 南漳县| 泰州市| 新兴县| 镇原县| 张家港市| 文昌市| 石泉县|