在.jnlp檔案中使用<all-permissions/> 标簽的解決方案
當采用Java Web Start釋出程式時,在.jnlp檔案中使用如下的标簽時:
<security>
<all-permissions/>
</security>
那麼所有釋出的jar都需要被标記(signed),否則會産生如下的異常:
JNLPException[category: 安全錯誤 : Exception: null : LaunchDesc:
.........
.........
</jnlp> ]
at com.sun.javaws.LaunchDownload.checkSignedResourcesHelper(Unknown Source)
at com.sun.javaws.LaunchDownload.checkSignedResources(Unknown Source)
at com.sun.javaws.Launcher.prepareLaunchFile(Unknown Source)
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
at com.sun.javaws.Launcher.launch(Unknown Source)
at com.sun.javaws.Main.launchApp(Unknown Source)
at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
at com.sun.javaws.Main$1.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
解決方法如下所述(也可以參照JDK幫助文檔):
你要采用下列方式運作toolkey工具:
keytool -genkey -alias TestApplet -validity 365
這條語句将産生一個别名為TestApplet的密匙證書(key certificate),該證書将存儲在你的.keystore檔案中。Validity指的是密匙的有效期,預設是180,但是這裡我們需要一年的時間,是以我們設定為365。在Windows指令提示行視窗中運作這條語句,你會從keytool中得到大量需要回答的簡短問題,如下圖所示:

可能你已經了解到了,最重要的東西當然是密碼。你可以使用你自己的密碼,但是不要忘記它。我前面說過,建立信任APPLET是一個很簡單的操作,但是你要了解每一步的道理。這裡,我們幾乎已經完成了它的操作,但還是要針對keytool說幾句。我建議你多多注意它,閱讀keytool的手冊來了解每個參數的用法是有必要的,對于你深入了解它的特性是很有幫助的。好了,既然我們産生了我們自己的密匙,讓我們來做個簡單操作吧:僅僅用我們的密匙來設計我們的APPLET。使用下面的指令行(請改變目前目錄到TestApplet.jar存放的目錄):
jarsigner TestApplet.jar TestApplet
第一個參數是我們的jar檔案,第二個是上面剛剛建立的密匙别名(Key Alias)。jarsigner指令不是友好的,是以你将看不到任何資訊。
恭喜,你已經成功建立了你的第一個真正的簽名APPLET!我想你恨不得馬上嘗試一下它的功能吧,我也找不出任何理由不讓你這麼做。上傳或者僅僅拷貝你簽名的JAR檔案到放置你先前的TestApplet.html和TestApplet.jar的那個目錄中,然後覆寫TestApplet.jar檔案。在浏覽器中浏覽TestApplet.html。
然後你的Applet會加載,并顯示一個視窗,如下所示:
它詢問你是否接受或者拒絕這個簽名的APPLET。點選“No”将以舊的未簽名的版本來顯示APPLET,那樣它仍然位于“沙盒”中且對“外面的世界”有很多限制。點選“Yes”将以你的APPLET獲得更多的自由。