2012-06-13 69 views
1

我有一個特定的需求,從jar文件讀取資源,然後將其寫入本地磁盤。但是當我嘗試寫入該資源到本地磁盤時出現異常:通過JNLP寫入本地文件

java.io.FilePermission (write) is raised. 

我有我的jar簽名。我也嘗試了以下解決方案,但它也不起作用。

AccessController.doPrivileged(new PrivilegedAction() 

似乎沒什麼可行的。

我在簽名jar後丟失了一個步驟,因爲這是最常用的解決方案嗎?

如何在不使用策略文件的情況下寫入本地文件(因爲這不能在每臺客戶機上完成)?

+2

看着各種服務?如果我記得正確,有一個用於訪問本地文件系統。 –

+0

@ThorbjørnRavnAndersen查看我的評論如下。 (嘗試演示:) –

+1

@AndrewThompson:感謝您創建JaNeLa,btw :) – haylem

回答

3

的JNLP還需要指定:

<security> 
    <all-permissions/> 
</security> 

有關詳細信息,請參閱JNLP File Syntax


我一般會用在湯姆的回答FileSaveService詳細的,但是這聽起來更像是一種情況:「文件」可以是一個默認屬性文件來配置應用程序。自從應用程序以來,保存服務並不適合。無法知道文件的存儲位置,或者以後如何訪問文件。出於安全原因,提供的FileContents對象代替File沒有返回路徑的方法。

在這種情況下,請提取配置的詳細信息。文件&使用JNLP API的PersistenceService來存儲它們。這是一個demo. of the PersistenceService。此服務也適用於沙盒應用程序。 (沒有代碼簽署巫術)。

+0

安全標籤幫了我。這是我正在尋找的解決方案。萬分感謝。 – Harshdeep

+0

不客氣。很高興你把事情解決了。 :) –

+0

我正在使用FileSaveService,看到你是同一個作者。在使用相同的方法時,我發現JNLP Client一直忽略我在方法調用中給出的文件名和文件擴展名。您可以請我幫助我如何讓JNLP客戶端在調用'saveFileDialog'方法的同時兌現這些給定的參數。還有一種方法可以知道用戶存儲文件的位置嗎? – Harshdeep

4

您可以使用javax.jnlp.FileSaveService從未簽名的WebStart應用程序通過用戶交互保存文件。

可能是你缺少的一塊是在JNLP文件中標記應用程序是安全的。然而,編寫一個安全的應用程序有點棘手,我不會推薦它。

+0

另請參閱[JNLP文件服務演示。](http://pscode.org/jws/api.html#fs)。 –

+1

注意「無符號」。這意味着它可以在沒有代碼簽名巫術的情況下在沙箱中運行。 –

+0

如果應用程序未簽名,對話框將顯示警告圖標。 – finnw