2015-07-01 20 views
0

我想爲插件庫編寫SecurityManager,我想知道如何/如果我可以使權限僅適用於插件目錄中的插件。目前權限適用於一切。SecurityManager範圍

import java.security.AccessControlContext; 
import java.security.AccessController; 
import java.security.Permission; 

public class PluginSecurityManager extends SecurityManager { 

public PluginSecurityManager() { 
    this.context = AccessController.getContext(); 
    System.setProperty("java.security.policy", "res/security/policy.txt"); 
} 

public void checkPermission(Permission perm) { 
    this.checkPermission(perm, context); 
} 

public AccessControlContext getContext() { 
    return context; 
} 

private final AccessControlContext context; 
} 

政策文件

grant codeBase "file:/plugins/*" { 
permission java.io.FilePermission "res/*", "read"; 
permission java.io.FilePermission "user.dir/ikaros-cache/cache.zip", "read"; 
permission java.lang.reflect.ReflectPermission "suppressAccessChecks"; 
}; 

回答

0

SecurityManager已經被傳遞檢查AccessController使用策略文件。

子類SecurityManager沒有什麼理由。您需要獲得許可,否則您撥打AccessController.getContext的電話將會有效返回完全權限。

如果他們需要插件完全權限,通過反射抑制反射訪問檢查。

編輯:哦,我也看到你似乎在構建一個SecurityManager初始化相關的全局狀態後改變系統屬性。通常這些事情不會被重讀。