2011-04-14 96 views
3

我在理解Java安全模型時有些困惑。在我${JDK_HOME}/jre/lib/security/java.policy文件,我可以看到如下條目:在Java中更改系統屬性 - 安全策略文件

grant { 
    // Allows any thread to stop itself using the java.lang.Thread.stop() 
    // method that takes no argument. 
    // Note that this permission is granted by default only to remain 
    // backwards compatible. 
    // It is strongly recommended that you either remove this permission 
    // from this policy file or further restrict it to code sources 
    // that you specify, because Thread.stop() is potentially unsafe. 
    // See "http://java.sun.com/notes" for more information. 
    permission java.lang.RuntimePermission "stopThread"; 

    // allows anyone to listen on un-privileged ports 
    permission java.net.SocketPermission "localhost:1024-", "listen"; 

    // "standard" properies that can be read by anyone 


    permission java.util.PropertyPermission "java.vm.version", "read"; 
..... ..... 

最後一行,上面寫着:permission java.util.PropertyPermission "java.vm.version", "read";

我把它解釋爲:運行在虛擬機有權限讀取屬性「Java程序java.vm.version」

按照這種理解我寫了一個示例程序只是爲了檢查,如果我得到任何運行時錯誤。如果我改變這個屬性:

System.setProperty("java.vm.version", "my.jvm.version.2345"); 
    System.out.println(System.getProperty("java.vm.version")); 

沒有錯誤;而不是System.out.println顯示我的修改後的值,即my.jvm.version.2345

這是否意味着在java.policy中設置的策略不起作用,我在這裏丟失了什麼?

回答

9

java.policy文件未在正常的java進程中使用。您必須先將java進程配置爲使用SecurityManager(.e.g在命令行中添加「-Djava.security.manager」)。更多詳情here

2

不要浪費時間搞亂政策文件。對於程序員來說,這對他們來說是非常困難的,對最終用戶來說幾乎是不可能的。

如果一個應用程序。需要信任,對其進行數字簽名,並在提示時說服用戶信任代碼。

+0

謝謝安德魯和我太同意你了。我只是好奇地看到,政策文件模型是如何工作的? – Vicky 2011-04-15 01:17:55

+0

@Vicky我從來沒有搞錯政策文件足以告訴你! ;) – 2011-04-15 01:56:38

+0

哈哈!所以你告訴人們不要亂搞政策文件,因爲你自己不明白它們? – 2013-04-08 18:31:43