package com.xiuye.security;
public class Privilege {
public static void main(String[] args) {
System.setProperty("java.security.policy", "security.policy");
System.setSecurityManager(new SecurityManager());
// PrivilegedAction<String> readPropertiesAction = ()->{
//
// log(System.getProperty("java.security.manager"));
//
// return "OK";
// };
// log("Read Properties ? : "+AccessController.doPrivileged(readPropertiesAction));
PrivilegeUtil.doPrivileged();
log("===================================");
PrivilegeUtil.printlnProperties("called by Main");
log("===================================");
Class<Privilege> clazz = Privilege.class;
log("ProtectDomain := "+ clazz.getProtectionDomain());
}
private static<T> void log(T t){
System.out.println(t);
}
}
package com.xiuye.security;
import java.security.AccessController;
import java.security.PrivilegedAction;
public class PrivilegeUtil {
public static void doPrivileged(){
PrivilegedAction<String> readPropertiesAction = ()->{
log("doPrivileged");
printlnProperties("called by doPrivileged");
return "OK";
};
log("Read Properties ? : "+AccessController.doPrivileged(readPropertiesAction));
}
public static void printlnProperties(String s){
log("printlnProperties "+s);
log(System.getSecurityManager());
}
private static<T> void log(T t) {
System.out.println(t);
}
}
grant {
permission java.lang.RuntimePermission "getProtectionDomain";
permission java.util.PropertyPermission "java.security.manager", "read";
permission java.util.PropertyPermission "java.security.manager", "write";
permission java.util.PropertyPermission "java.security.policy", "write";
permission java.util.PropertyPermission "java.security.policy", "read";
};// 这里也需要";"!
doPrivileged
printlnProperties called by doPrivileged
java.lang.SecurityManager@3abc88
Read Properties ? : OK
===================================
printlnProperties called by Main
java.lang.SecurityManager@3abc88
===================================
ProtectDomain := ProtectionDomain (file:/D:/programming/DevelopingProjects/JavaAPILearning/bin/ <no signer certificates>)
sun.misc.Launcher$AppClassLoader@19e0bfd
<no principals>
java.security.Permissions@128cdfa (
("java.lang.RuntimePermission" "exitVM")
("java.io.FilePermission" "\D:\programming\DevelopingProjects\JavaAPILearning\bin\-" "read")
)