簡體   English   中英

Java 小程序權限

[英]Java Applet Permissions

我已經整理了一個基本的小程序,用戶從他們的硬盤驅動器中選擇一個文件,它讀取該文件的第一行並將其傳遞給 JavaScript 進行一些額外的預處理,然后當您單擊一個按鈕時,它會嘗試上傳該文件通過 HTTP POST 請求提交文件。 我找到了一個非常基本的開源小程序,用於上傳我為最后一點復制和修改的文件。

但問題是,它並不完全奏效。 看起來它運行良好,但后來我遇到了兩個與權限相關的障礙。 Java 控制台中的消息說小程序在以下兩個權限上有訪問被拒絕錯誤:

java.lang.RuntimePermission setFactory
java.io.FilePermission read

我覺得這很奇怪,因為當我使用 NetBeans 中選中的“自簽名”選項構建它時,我以為我已經授予了該小程序的權限,然后單擊以確認瀏覽器中的小安全彈出窗口。

此外,我自己編碼的部分,它讀取文件並將第一行傳遞給 JavaScript 工作正常。 這是一個非常明確的指標,表明小程序能夠從本地文件系統讀取。 直到我真正嘗試開始上傳,麻煩才開始,我想需要注意的一件事是上傳過程似乎在一個新線程中運行。 而它的 rest 都在主 class 中運行而無需創建線程。

我是 Java 的新手,對 Java 中的線程知之甚少; 我是否需要以某種方式將權限傳遞給這個新線程? 或者有什么效果? 提前致謝。

您可能需要向安全管理員(代碼,而不是管理員)詢問執行特權操作的權限。 由於種種原因,applet 能夠打開本地文件通常不是一件好事,因此它受到了相當嚴格的保護。

基本的關鍵是調用AccessController.doPrivileged()並且在 Java Ranch FAQ 中有一個 很好的小教程

我有一個類似的問題,需要永遠解決。 事實證明,從 JavaScript 調用的小程序方法沒有權限,即使您在策略文件中明確授予它們。

此解決方法對我有用(將命令添加到小程序循環通過的隊列): http://blog.carrythezero.com/?p=5

確保您了解此處的危險:任何人都可以在頁面上修改 JavaScript 並更改輸入小程序的內容。 就我而言,我知道代碼永遠不會在網絡服務器上運行,並且 class 未簽名,因此除非在我的策略文件授予的特定位置,否則它將失敗。

這可能是因為 JavaScript 未簽名。 我強烈建議不要簽署代碼,特別是如果你不知道自己在做什么。 從 6u10(尚未在 Mac 上)開始,小程序可以使用 JNLP,包括 FileOpenService,因此您不必簽名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM