AccessController.doPriviliged() メソッドでスレッドの作成を禁止しようとしています。以下のメソッドは、スレッドを作成して実行します。これを -Djava.security.manager で実行します。このリンクによると、modifyThreadGroup が許可されていない場合、スレッドの作成は許可されませんか?
http://docs.oracle.com/javase/7/docs/technotes/guides/security/permissions.html
なぜこれが起こっているのか、そしてAccessControllerを使用してスレッドの作成を禁止する正しい方法について誰かが教えてくれますか?
// .java.policy in $UserHome:
grant codeBase "file:/C:/-" {
permission java.security.AllPermission;
};
public class ThreadTest {
public void testModifyThreadGroup() {
// grant no permissions
Permissions perms = new Permissions();
ProtectionDomain domain = new ProtectionDomain(
new CodeSource( null, (Certificate[]) null ), perms );
AccessControlContext _accessControlContext = new AccessControlContext(
new ProtectionDomain[] { domain } );
try {
AccessController.doPrivileged(new PrivilegedExceptionAction(){
@Override
public Object run() {
try {
// modifyThreadGroup not granted, so should not be able
// to call Thread constructor???
Thread t = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Thread.run()");
}
});
t.run();
} catch (Exception ex) {
System.out.println("Error running thread: " + ex);
}
return null;
}}, _accessControlContext);
} catch(Exception e) {
System.out.println("Access Error running doPrivileged: " + e);
}
}
}