2013-03-05 49 views
0

我們不使用默認的Java安全策略,因爲它允許我們要禁止的事情。所以我們有我們自己的策略文件,它通常不允許從任何地方讀取...授予對rt.jar的權限(希望我看不到一個愚蠢的錯字)

但是這意味着rt.jar本身無法在文件需要時讀取,這是不好的。

所以我增加了以下規定:

grant codeBase "file:${java.home}/lib/rt.jar" { 
    permission java.security.AllPermission; 
}; 
grant codeBase "file:${java.home}/jre/lib/rt.jar" { 
    permission java.security.AllPermission; 
}; 

我不知道,如果java.home是將JDK或JRE,所以我同時設置。但是當我運行我的測試時,當rt.jar嘗試從文件讀取時,仍然會出現安全異常。

顯然我做錯了什麼,所以我希望別人能發現我的錯字。

我曾嘗試:

  • file:
  • 添加jar:file:之前和之後!/-添加/.jar

回答

0

我不認爲你可以刪除系統類權限(nullClassLoadernullProtectionDomain,所以沒有CodeSource)。

我想你是誤解了Java 2安全模型(很容易做到,因爲沒有人真正理解它)。通過檢查堆棧中的所有幀(粗略地說)來完成安全檢查(除少數選擇方法外)。每個測試框架都必須具有權限。如果堆棧中只有一個幀沒有權限,則檢查失敗。

(你可以有一個SecurityManager是諮詢AccessController之前一直拒絕某些權限。)

+0

嗯......所以基本上是「在堆棧上的東西」沒有被授予權限。我可以看到哪些可能沒有被授予訪問的唯一東西是「com.intellij.rt.execution.application.AppMain」...我不知道我有辦法解決那個問題。 – Trejkaz 2013-03-06 03:35:43