网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  使用 java 1.2 的 authenticator 类     
  文章作者:未知  文章来源:水木森林  
  查看:108次  录入:管理员--2007-11-17  
 
  您用喜好的浏览器在网上冲浪时,您会遇到要求代理服务器认证或 http 服务器认证的 url,并会出现您再熟悉不过的窗口要求您输入用户名及口令:
  
  从浏览器访问一个诸如 http://www.lombard.com/cgi-bin/quotes/quote 这样的 url 不成问题,因为您自己可以提供用户名和口令。但是当您试图通过 java 程序从与此 url 相关的 inputstream 中读取数据时,该 java 程序就会发出 filenotfoundexception 异常。
  
使用 java 1.2 的 authenticator 类

  在 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 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());
  }
  }
  }
 
 
上一篇: 用java得到硬盘空间的三种不同方法    下一篇: java 技巧:步入本地方法圣殿的七个步骤
  相关文档
struts环境配置手顺(eclipse版),包括sql server的连接 11-17
装饰模式(decorator pattern)(1) 11-17
.net真的战胜了j2ee吗? 11-17
从零开始开发一个分布式的j2ee应用程序 11-16
junit的开发(eclipse插件开发系列) 11-17
分析和设计 11-17
java开发工具与开发环境问答集 11-17
处理驱动器和文件夹 11-16
7个软件开发原则 11-17
探索j2me:用gcf通信 11-17
jaas基础 11-17
超级实用的几种表单校验效果收集 11-17
跟我学java swing之游戏设计(1) 11-16
java对象持久化技术hibernate入门之一 11-16
利用线程池技术来实现端口扫描 11-16
java 2 源码解读:java.util.arraylist 11-17
getdrive 方法 11-16
jvm的垃圾回收机制详解和性能调优 11-17
用factorymethod模式扩展mymsdntvlibrary 11-17
eclispe下开发struts完整解决乱码问题 01-09
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息