2012-12-11 25 views
1

我想使用java.security.manager創建自定義權限。基本上我想創建一個權限,策略文件必須指定這個權限,以便執行我的Java應用程序的用戶能夠使用Java的GuardedObject功能訪問我所守護的對象。我似乎無法得到它的工作。請找到下面的細節。如果我做錯了,請告訴我。我是新來的Java安全管理:使用Security Manager保護對象

應用程序的源代碼:

import java.security.AccessControlException; 
import java.security.Guard; 
import java.security.GuardedObject; 
import java.util.PropertyPermission; 
import java.security.*; 

class person {} 

class custompermission extends BasicPermission { 
custompermission(String name) { 
super(name); 
} 

custompermission(String name, String action) { 
super(name,action); 
} 
} 

public class program1 { 
public static void main(String[] argv) throws Exception { 
String person = "person"; 
Guard guard = new custompermission("perm"); 
GuardedObject gobj = new GuardedObject(person, guard); 
try { 
Object o = gobj.getObject(); 
} catch (AccessControlException e) { 
e.printStackTrace(); 
} 
} 
} 

Manifest.txt文件爲我的罐子:

Main-Class: program1 

我的政策文件 - my.security.policy:

grant codeBase "file:/C:/users/root/desktop/temp/temp2/program1.jar" {    
permission "perm"; 
}; 

編譯程序和JAR文件的創建:

C:\Users\root\Desktop\temp\temp2>javac program1.java 
C:\Users\root\Desktop\temp\temp2>jar -cvfm program1.jar Manifest.txt *.class 
added manifest 
adding: custompermission.class(in = 335) (out= 234)(deflated 30%) 
adding: person.class(in = 188) (out= 162)(deflated 13%) 
adding: personpermission.class(in = 335) (out= 232)(deflated 30%) 
adding: program1.class(in = 790) (out= 488)(deflated 38%) 

程序的執行:

C:\Users\root\Desktop\temp\temp2>java -Djava.security.manager -Djava.security.policy=my.security.policy -jar program1.jar 
java.security.AccessControlException: access denied ("custompermission" "perm") 
at java.security.AccessControlContext.checkPermission(Unknown Source) 
at java.security.AccessController.checkPermission(Unknown Source) 
at java.lang.SecurityManager.checkPermission(Unknown Source) 
at java.security.Permission.checkGuard(Unknown Source) 
at java.security.GuardedObject.getObject(Unknown Source) 
at program1.main(program1.java:37) 
C:\Users\root\Desktop\temp\temp2> 

回答

0

你的代碼沒有權限類的定義,在政策文件中。你的政策文件應該是這樣的:

grant codeBase "file:/C:/users/root/desktop/temp/temp2/program1.jar" {    
    permission CustomPermission "perm"; 
}; 

而且我認爲CustomPermission應該由公共類在它自己的文件中。

相關問題