0

我在Ubuntu上運行使用glassfish服務器的webservice。問題是 - 它需要訪問共享資源之外的目錄。目前它給出了一個錯誤,說「權限被拒絕」。我也將權限設置爲server.policy。Java - glassfish - web服務 - 本地文件訪問

grant codeBase "/home/glassfish/glassfish/test/-" { 
    permission java.security.AllPermission; 
}; 

但它似乎不工作。 我試過<property name="alternatedocroot_1" value="from=*.* dir=/home/glassfish/glassfish/test"/>,但它似乎只給予閱讀權限。我還需要寫入權限。所以我的問題是如何設置寫入權限?

謝謝。

+2

你是否檢查過glassfish用戶對目錄有寫權限? – beerbajay 2012-04-16 07:09:43

+0

是glassfish用戶有讀/寫/執行所有權限。 – Barun 2012-04-16 07:20:54

+0

你如何訪問這些文件? Java File API或加載爲資源? – NBW 2012-04-16 19:07:21

回答

0

這不是一個JavaSecurity問題,所以你不應該在這方面調整任何東西。

FWIW我們在各種風格的Windows上部署到GF的web應用都使用File API寫入「Application」目錄之外的目錄。 alternatedocroot屬於GF,它使用DefaultServlet提供靜態內容,而不是在Application部署目錄之外編寫。

在Windows上運行服務時,必須小心「運行方式」用戶具有寫入目標目錄的適當權限,在Unix上,您需要確保用戶通過rc(init.d )運行asadmin.sh的腳本有權讀取/寫入目標目錄。

我會仔細檢查java進程GF正在運行的用戶是否在您嘗試寫入的目錄上具有rwx權限。確保用戶可以寫入目標文件夾。爲了測試這個,你可以向用戶索取並使用'touch'命令,如下所示:touch/tmp/test以這種方式驗證寫入權限。通過運行'ls -l/tmp/test'以確保您可以讀取它,同樣驗證讀取權限。

看看'ps -ef | grep java'顯示來驗證運行GF java進程的用戶。另外在你的代碼中,請嘗試指定測試文件的完整路徑,例如。 File test = new File(「/ tmp/test」);

您是從rc腳本運行GF還是從shell提示符使用asadmin.sh啓動它?如果您正在運行rc腳本,請檢查您的rc腳本是否真正以您希望的用戶身份運行。