2013-05-16 69 views
1

我正在使用JRE7。我已經使用jarsigner簽署了jar文件。但我仍然得到異常AccessControlException:訪問被拒絕 - FilePermission

java.security.AccessControlException: access denied ("java.io.FilePermission" 
    "C:\Program Files\Java\jre7\lib\ext\Cert.P12" "read") 

我想讀取存儲在該目錄中的Cert.P12。

我使用keytool生成證書並簽署了jar。當瀏覽器提示我我接受了證書。是否因爲它不是真正的證書我得到這個錯誤?

此代碼讀取文件是一個小程序代碼。

http://www-personal.umich.edu/~lsiden/tutorials/signed-applet/signed-applet.html提到,如果它被簽名,錯誤將會消失。但它不適合我。

+0

這是一個小程序。我正試圖從瀏覽器加載。 – Satish

回答

0

如果,甚至簽署的applet之後,你仍然可以得到一個SecurityException,嘗試運行代碼特權代碼:

AccessController.doPrivileged(new PrivilegedAction() { 
    public Object run() { 
     // perform the security-sensitive operation here 
     return null; 
    } 
}); 
+0

這是真的,但帶來了另一個問題 - 在字節碼中生成內部類,然後apllet拋出java.lang.SecurityException:類「Main $ 1」的簽名者信息與相同包中的其他類的簽名者信息不匹配 問題存在於:'jar cvf Main.jar Main.class Main $ 1.class; jarsigner Main.jar certalias' –

0

您是否授予您所申請簽名的許可?對於Java的安全管理員來說,簽名本身沒有任何意義。你還需要一個有效的證書來驗證簽名,它需要被系統「信任」...

+0

我得到了「你信任運行」的窗口。我點擊「運行」。這相當於信任我相信的證書。我錯了嗎? – Satish

+0

*「我錯了嗎?」*不,你的理解是正確的。當你點擊「確定/運行」時,小程序應該擁有所有的權限。 –

1

它的權限問題,我認爲它不是關於它是否或它不是一個真正的證書(我不知道)。您的證書保存在C:\Program Files...。確保您在該目錄中具有read權限。 Windows家長控制可能會阻止您訪問證書文件。

爲了您自己的安全起見,有時Windows會阻止應用程序訪問C:\Program Files\...文件夾,並且它需要Administrator權限才能訪問它們。也許,您必須將管理員權限設置爲您的服務器中的JRE,並以管理員身份運行它。

+0

我移植到C:\ temp \ Cert.P12。它給了同樣的錯誤 – Satish

+0

@Satish你是否試圖以管理員身份運行你的JRE? – DaGLiMiOuX

+0

我還沒有嘗試過,但在互聯網部署時,我不能指望用戶以管理員身份運行JRE。所以即使它起作用也無濟於事。 – Satish