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

如何讓applet訪問網絡?

2013-11-23 19:35:42  來源: Java核心技術 

  對Java Applet和Java Web Start進行數字簽名

  我們知道Java Applet和Java Web Start程序在運行的時候受到安全限制例如不能夠訪問本地文件系統不能夠隨意訪問網絡本文將演示如何對代碼做數字簽名讓客戶在運行時選擇是否信任你的簽名以使你的程序具有更多的權限在這裡我們不打算購買證書

  我的計算機環境如下

  Windows professional sp

  SUN JDK

  IE

  JAVA_HOMEPATHCLASSPATH等環境變量均已設置

  客戶端需求

  客戶端浏覽器需要安裝Java插件這裡的Java插件是安裝JDK時一起安裝的如果客戶端不需要做Java開發可以去下載SUN的網站下載JRE到客戶端安裝

  接下來看看下面這個Applet它只有一個按鈕點擊這個按鈕程序就在本地建立一個文件如果成功彈出一個對話框顯示成功消息如果發生異常(安全異常或者IO異常)也彈出一個顯示錯誤的對話框源文件如下

  源文件test\TestAppletjava

  package test;

  import javaapplet*;

  import javaio*;

  import javaawtevent*;

  import javaxswing*;

  public class TestApplet

  extends Applet {

  public void init() {

  JButton button = new JButton(Create a file);

  buttonaddActionListener(new ActionListener(){

  public void actionPerformed(ActionEvent evt){

  File file = new File(c:\\atxt);

  try {

  filecreateNewFile();

  JOptionPaneshowMessageDialog(null成功創建文件c:\\atxt

  消息JOptionPaneINFORMATION_MESSAGE );

  }catch (Exception ex) {

  JOptionPaneshowMessageDialog(

  nullexgetMessage()錯誤JOptionPaneERROR_MESSAGE);

  }

  }

  });

  add(button);

  }

  }

  在與test目錄的父目錄編譯這個Applet

  javac test\TestAppletjava

  打包生成testjar文件

  jar cvf testjar test

  以下是使用Applet的HTML頁面l

  testApplet will appear below in a Java enabled browser

  codebase =

  code = testTestAppletclass

  name = TestApplet

  archive = testjar

  width =

  height =

  hspace =

  vspace =

  align = middle

  >

  現在就讓我們運行一下打開l點擊按鈕你看到了什麼?非常不幸我們沒有經過數字簽名的Applet在默認情況下沒有寫本地文件的權限那麼讓我們准備簽名代碼吧

  首先用keytool命令產生用來簽名的key下面這個命令產生一個叫mykey的key它存儲在我們新建的叫mystore的keystore中

  keytool genkey alias mykey keystore mystore

  接下來它會問一些問題包括keystore的密碼key的密碼等如下所示

  輸入keystore密碼 storepass

  您的名字與姓氏是什麼?

  [Unknown] AYellow

  您的組織單位名稱是什麼?

  [Unknown] 我的組織單位

  您的組織名稱是什麼?

  [Unknown] 我的組織

  您所在的城市或區域名稱是什麼?

  [Unknown] 北京

  您所在的州或省份名稱是什麼?

  [Unknown] 北京

  該單位的兩字母國家代碼是什麼

  [Unknown] CN

  CN=AYellow OU=我的組織單位 O=我的組織 L=北京 ST=北京 C=CN 正確嗎?

  [否] Y

  輸入的主密碼

  (如果和 keystore 密碼相同按回車) keypass

  完成後會在當前目錄下生成一個叫mystore的文件這個文件包含了我們的key用jarsigner命令簽名我們的代碼testjar(需要輸入keystore和key的密碼)

  jarsigner keystore mystore testjar mykey

  Enter Passphrase for keystore: storepass

  Enter key password for mykey: keypass

  再次運行Applet在Applet加載的時候會出現一個對話框說該Applet由不可信任的發行者簽名並宣稱代碼是安全的是不是要對Applet授權選擇授權於會話然後點擊我們的按鈕看看是不是成功的創建了文件?

  對於Java Web Start程序簽名jar文件的過程是一樣的但是需要在jnlp文件中做一些修改例如在jnlp根元素下加上一下部分

  運行程序在第一次啟動的時候出現以下對話框

  選擇啟動以後啟動時這個對話框再也不會出現因為Java Web Start啟動後相當於一個安裝在本地的程序既然第一次客戶選擇了信任以後這個對話框就再沒有必要出現了當然對於上面的Applet例子我們也可以選擇總是授權

  與大家討論仔細查看一下我們可以發現Applet和Java Web Start出的對話框的措辭是不一樣的而且很顯然前者措辭不當在這種情況下客戶很可能對不可信任的程序授權造成安全上的隱患如果前面我們創建keystore的時候在我的組織中填上Microsoft又會怎麼樣?對於一個不可信任的程序前者默認的按鈕居然是授權而後者是退出Applet的安全為什麼會是這樣?


From:http://tw.wingwit.com/Article/program/Java/hx/201311/27148.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.