分享
 
 
 

创建访问本地文件系统的信任APPLET(1)

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

创建访问本地文件系统的信任APPLET(1)

Written By Olexiy & Alexander Prokhorenko

Translated by Caiyi0903(Willpower),2004.1.29

创建一个信任的APPLET,使其拥有本地客户端文件系统的访问权限,这一直是一个重要的话题。依赖于一些规范,许多问题仅仅只能在客户端被执行。因此,很多情况下,不熟悉信任APPLET技术的程序员们大都认为不可能实现对客户端文件的操作和搜索其他的操作方式。然而,确实存在这样一种方式,且可以在很多方面被广泛使用。在本文中,我将给你展示一个范例,来创建简单的信任APPLET,它将访问一个你指定的本地文本文件(注意:你需要使用JDK1.3或者更高的版本)。

首先,我要谈一下我们不得不在客户端软件上所做的限制。我要声明一下,本文给定的签名APPLET仅仅只适合于安装有JDK(1.3版本以上)或类似插件的客户机,且使用IE 4以上或Netscape 4.75以上版本的浏览器。除这些条件以外的客户机,将不支持本文的要求,为这些老式的其他客户机创建信任的签名APPLET需要JDK1.1技术,使用的是javakey工具。因为采用老的方式创建签名APPLET已经超过了本文所描叙的范围,所以有必要在这里解释一下。

现在,再来说说我们(程序员)的平台。我们使用的是Windows平台,安装有J2SDK 1.4.1和JAVA容器Jakarta-Tomcat 4.1.29。如果你使用的是相同的软件,那么可以100%的保证本文描叙的所有内容都将完美的在你的平台下运行。一般而言,本文描叙的所有内容应该能在兼容的软件上运行。

开始编码之前,我要解释一下为什么我们需要找出一种特定的而不是没有价值的方式来做这些简单的标准的事情,比如读本地文件等。在JAVA 1.1时代存在一种观点,认为有必要在APPLET的帮助下将一部分要执行的任务转移到客户端计算机上,来创造未来的一代网络计算机。然而,由于APPLET限制了安全性,所以这种做法不可能实现。开发者们也推测出了APPLET是一种所谓的“沙盒”(sandbox)----一个简单的位置----不允许引用任何系统函数。随着JAVA技术的发展,信任的APPLET(trusted Applet)被发明出来,在这种APPLET中的“沙盒”安全规则不被包含在内。那么我们应该怎么利用这个机会呢?下面我们将找到答案。

在JDK中,除了javac,我们还需要两个额外的实用工具--keytool和jarsigner。keytool是一个用来创建和控制一对私有和公共密匙的工具,用来管理你的私有密匙,即.keystore文件。jarsigner工具是用来给一个jar文件签名,该jar文件里有一个APPLET类,它可以用来验证和APPLET一起分发的数字签名。签名的整个过程非常的简单;然而,我们需要做一些初始化的准备工作。首先让我们来创建我们的APPLET。其中有一个文本域(text field),我们会在那里输入一个文件名,一个大的文本区域(text area)用来显示文件内容,一个LOAD按钮将执行文件读取工作。这个APPLET的源代码如下图所示,因为它很简单,我们给它加入了一些注释。我们没有特别的给它添加一些特殊的检查框和更复杂的功能,所以该代码很容易阅读,而且读者能够集中关注它转变到信任APPLET的过程。除此之外,你甚至也能够根据你自己的喜欢的可视化工具(如SUN ONE Studio,JBUILDER等)来创建你自己的APPLET,但我们提供的这个源代码能帮助你更快的理解APPLET签名的整个过程。

1: // TestApplet.java

2: import java.io.*;

3: import java.awt.*;

4: import java.awt.event.*;

5: import java.applet.*;

6: import javax.swing.*;

7: import javax.swing.border.*;

8:

9: public class TestApplet extends JApplet

implements ActionListener {

10: private JPanel pane = null;

11: private JScrollPane scrolling = null;

12: private JTextPane fileBox = null;

13: private JTextField tfFilename = null;

14: private JButton butLoad = null;

15: private final String LOAD = "load";

16:

17: public void init() {

18: try {

19: jbInit();

20: } catch(Exception e) {

21: e.printStackTrace();

22: }

23: }

24:

25: // method which will read data from file, and return it in

// String

25: public String readFile(String fn) {

26: String thisLine, ret = "";

27: try {

28: FileInputStream fin = new FileInputStream(fn);

29: BufferedReader myInput = new BufferedReader

(new InputStreamReader(fin));

30: while ((thisLine = myInput.readLine()) != null) {

31: ret += thisLine + "\n";

32: }

33: } catch (Exception e) {

34: ret = "Cannot load, exception!";

35: }

36: return ret;

37: }

39:

40: private void jbInit() throws Exception {

41: pane = new JPanel();

42: pane.setBounds(new Rectangle(0, 0, 500, 325));

43: pane.setLayout(null);

44: pane.setBorder(BorderFactory.createEtchedBorder(

EtchedBorder.LOWERED));

45: pane.setBackground(new Color(221, 194, 219));

46:

47: fileBox = new JTextPane();

48: fileBox.setText("");

49: fileBox.setEditable(false);

50: scrolling = new JScrollPane(fileBox);

51: scrolling.setBounds(new Rectangle(16, 65, 295, 225));

52:

53: tfFilename = new JTextField();

54: tfFilename.setText("");

55: tfFilename.setBounds(new Rectangle(16, 23, 206, 29));

56:

57: butLoad = new JButton();

58: butLoad.setBounds(new Rectangle(231, 23, 80, 30));

59: butLoad.setText("Load");

60: butLoad.setActionCommand(LOAD);

61: butLoad.addActionListener(this);

62:

63: pane.add(scrolling);

64: pane.add(tfFilename);

65: pane.add(butLoad);

66:

67: setContentPane(pane);

68: }

69:

70: public void actionPerformed(ActionEvent e) {

71: if (e.getActionCommand().equals(LOAD)) {

72: fileBox.setText(readFile(tfFilename.getText()));

73: }

74: }

75: }

下面的步骤也很简单。我们要编译,创建一个JAR压缩包,创建一个简单的HTML文件来演示文本文件并试图使用它。也许它还能够加载一个文件而不使用签名技术。让我们来看看,要编译和创建一个JAR压缩包,采用下面的步骤:

javac TestApplet.java

jar cvf TestApplet.jar TestApplet.class

这里的cvf参数是指定JAR包的文件名为TestApplet.jar,并显示详细的输出信息。

好了,让我们接下来用任一种文本编辑器来创建TestApplet.html 文件。

1: <html><body>

2: <applet code="SignedApplet.class" archive="SignedApplet.jar"

width=325 height=325>

3: </applet>

4: </body></html>

然后在同一个文本编辑器中随便创建一个文本文件,比如 C:\Demo.txt,在这个文件中,你需要输入一些单词和句子。在这里,我们输入HelloWorld。因此,如果它被成功加载,你应该能够看见这些内容。

拷贝你的TestApplet.html和TestApplet.jar 文件到你的TOMCAT的WEBAPP目录中,该目录存放着你的Web应用程序。然后浏览这个HTML文件,在这里是http://localhost:8080/green/TestApplet.html

当APPLET被加载,输入文本文件路径(C:\Demo.txt)并点击“Load”按钮。下面将是你所看到的:

OK,我们得到一个异常信息。这个不算惊奇。让我们来尝试给它签名,再看看有什么事情发生了改变。你要采用下列方式运行toolkey工具:

keytool -genkey -alias TestApplet -validity 365

(To Be Continued...)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有