2011-01-31 83 views
1

我在我們的(代碼簽名的)Java applet「訪問被拒絕(java.net.SocketPermission xxxx:443 connect_resolve」)中存在一個錯誤。我們有一個HTML「保存」 (通過javascript)applet的方法來保存一個文件,加載到applet,到web服務器上,經過一些廣泛的谷歌研究之後,我通過在doPrivileged()中包裝applet的save方法代碼來修復它。高興。Java Applet沙盒安全性,本地訪問與外部訪問

我想確認我徹底明白,原來的情況和我申請的解決方案(向後,我知道,但環顧四周並沒有讓我真正研究這個問題)。

請告訴我特異性目的令我困惑的是我們在我們的內部網絡的測試服務器上廣泛測試了我們的applet,並且直到我們試圖從我們網絡外部的客戶端機器上獲得javascript「保存」按鈕時纔會出現此錯誤。所以在這一點上,我只是做了一個有教育的猜測:這就是Java小程序沙箱機制的工作原理。

這是真的嗎?只要客戶端小應用程序從位於同一個域網絡中的客戶端機器訪問Web服務器資源,它就被認爲是在沙箱牆內?如果客戶端機器位於Web服務器的本地網絡外部,則小程序請求會被視爲在沙箱外部並且需要doPrivileged?或者在這裏有另一種解釋,我錯過了?

我一直無法在sun的文檔或通過谷歌找到任何明確證明或反駁我斷言的內容。從人與Java小程序更多的經驗,澄清是極大的讚賞

+1

默認情況下,應用程序只應連接到從其下載的服務器。所以我想這就是爲什麼你需要一個特權的行動,但這只是一個猜測。 – biziclop 2011-01-31 21:40:54

回答

2

只要客戶端小程序從客戶端機器,它是在沙牆內認爲是相同的域網絡中訪問Web服務器的資源呢?

如果是這樣,你的意思是一個沙盒小應用程序可以'回家'到自己的服務器,那麼是的。

如果客戶端計算機在Web服務器的本地網絡外部,那麼applet請求會被視爲在沙箱牆之外,並且需要doPrivileged?

一個applet需要信任(數字簽名+由最終用戶接受)來訪問其他服務器的資源。使JavaScript更復雜的事情是JavaScript。突然間有一個'不可信'的要素被JRE考慮。通過將代碼封裝在doPrivileged()方法中,我們正在向JRE表明,即使被JS等其他東西調用,該代碼也會被信任。

+0

所以我想我要問的是,如果一個applet和它「屬於」的web服務器在同一個本地網絡上,它是否會承擔這種信任?最初我不會得到這個錯誤,當我點擊我們的工作機器上的JavaScript保存按鈕,這是我們的網絡服務器在同一網絡上。但是,如果我點擊我的家庭計算機上的javascript保存按鈕(與web服務器不在同一網絡上),我會得到該錯誤。感謝您的快速幫助,非常感謝! – sross 2011-02-02 00:25:41