熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Javascript >> 正文

使用 Java 1.2 的 Authenticator 類

2013-11-23 17:55:37  來源: Javascript 

  您用喜好的浏覽器在網上沖浪時您會遇到要求代理服務器認證或 HTTP 服務器認證的 URL並會出現您再熟悉不過的窗口要求您輸入用戶名及口令
  
  從浏覽器訪問一個諸如 bin/Quotes/quote 這樣的 URL 不成問題因為您自己可以提供用戶名和口令但是當您試圖通過 Java 程序從與此 URL 相關的 InputStream 中讀取數據時該 Java 程序就會發出 FileNotFoundException 異常
  

  在 Java 您可以通過在連接時記入 (post) 適當的認證字符串來避免這種情況但這種方法僅在您事先知道該 URL 是受保護的時才奏效(Authorization: Basic username:password其中基本認證域是以 base 編碼的)如果您事先沒有預見到文檔是受保護的則您甚至無法讀取文件內容(有關用 Java applet 或應用程序訪問口令保護的 URL 的解決方案請參閱Java 技巧 再談 URL 認證值得慶幸的是Java 在 包中添加了一個 Authenticator 類這使得訪問口令保護的 URL 變得極為容易
  
  現在對於 Java 您只需用 AuthenticatorsetDefault() 安裝一個 Authenticator這樣當需要認證時已安裝的 Authenticator 的 getPasswordAuthentication() 方法就會被調用然後您就可以用適當的用戶名和口令來設置 PasswordAuthentication 實例就這麼簡單
  
  所需步驟如下所示
  
  第一步安裝 Authenticator
  
  AuthenticatorsetDefault (new MyAuthenticator ());
  
  第二步創建 Authenticator 的子類
  
  class MyAuthenticator extends Authenticator {
  protected PasswordAuthentication getPasswordAuthentication() {
  return new PasswordAuthentication (username password);
  }
  }
  
  以下程序完整地顯示了這種行為它提供了自己的認證提示對話框
  
  import javaio*;
  import *;
  import javaawt*;
  import javaawtevent*;
  
  public class URLPassword extends Frame {
  
  private TextField tf = new TextField();
  private TextArea ta = new TextArea();
  
  public URLPassword() {
  
  super (URL Password);
  
  // 安裝 Authenticator
  AuthenticatorsetDefault (new MyAuthenticator ());
  
  // 設置屏幕
  add (tf BorderLayoutNORTH);
  tasetEditable(false);
  add (ta BorderLayoutCENTER);
  tfaddActionListener (new ActionListener() {
  public void actionPerformed (ActionEvent e) {
  String s = tfgetText();
  if (slength() != )
  tasetText (fetchURL (s));
  }
  });
  addWindowListener (new WindowAdapter() {
  public void windowClosing (WindowEvent e) {
  dispose();
  Systemexit();
  }
  });
  }
  
  private String fetchURL (String urlString) {
  StringWriter sw = new StringWriter();
  PrintWriter pw = new PrintWriter(sw);
  
  try {
  URL url = new URL (urlString);
  InputStream content = (InputStream)urlgetContent();
  BufferedReader in =
  new BufferedReader (new InputStreamReader (content));
  String line;
  while ((line = inreadLine()) != null) {
  pwprintln (line);
  }
  } catch (MalformedURLException e) {
  pwprintln (Invalid URL);
  } catch (IOException e) {
  pwprintln (Error reading URL);
  }
  return swtoString();
  }
  
  public static void main (String args[]) {
  Frame f = new URLPassword();
  fsetSize( );
  fsetVisible (true);
  }
  
  class MyAuthenticator extends Authenticator {
  protected PasswordAuthentication getPasswordAuthentication() {
  final Dialog jd = new Dialog (URLPasswordthis Enter password true);
  jdsetLayout (new GridLayout ( ));
  Label jl = new Label (getRequestingPrompt());
  jdadd (jl);
  TextField username = new TextField();
  usernamesetBackground (ColorlightGray);
  jdadd (username);
  TextField password = new TextField();
  passwordsetEchoChar (*);
  passwordsetBackground (ColorlightGray);
  jdadd (password);
  Button jb = new Button (OK);
  jdadd (jb);
  jbaddActionListener (new ActionListener() {
  public void actionPerformed (ActionEvent e) {
  jddispose();
  }
  });
  jdpack();
  jdsetVisible(true);
  return new PasswordAuthentication (usernamegetText() passwordgetText());
  }
  }
  }
From:http://tw.wingwit.com/Article/program/Java/Javascript/201311/25368.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.