| import java.lang.reflect.Member; |
| import java.security.Permission; |
| |
| public class Enforcer extends SecurityManager { |
| public static final Enforcer THE_ONE = new Enforcer(); |
| |
| /** whether to deny the next request */ |
| private boolean deny; |
| |
| /** |
| * Not publicly constructable. Use {@link #THE_ONE}. |
| */ |
| private Enforcer() { |
| deny = false; |
| } |
| |
| /** |
| * Deny the next request. |
| */ |
| public void denyNext() { |
| deny = true; |
| } |
| |
| /** |
| * Throw an exception if the instance had been asked to deny a request. |
| */ |
| private void denyIfAppropriate() { |
| if (deny) { |
| deny = false; |
| throw new SecurityException("Denied!"); |
| } |
| } |
| |
| public void checkPackageAccess(String pkg) { |
| System.out.println("checkPackageAccess: " + pkg); |
| denyIfAppropriate(); |
| super.checkPackageAccess(pkg); |
| } |
| |
| public void checkMemberAccess(Class c, int which) { |
| String member; |
| |
| switch (which) { |
| case Member.DECLARED: member = "DECLARED"; break; |
| case Member.PUBLIC: member = "PUBLIC"; break; |
| default: member = "<" + which + ">?"; break; |
| } |
| |
| System.out.println("checkMemberAccess: " + c.getName() + ", " + |
| member); |
| denyIfAppropriate(); |
| super.checkMemberAccess(c, which); |
| } |
| |
| public void checkPermission(Permission perm) { |
| System.out.println("checkPermission: " + perm); |
| denyIfAppropriate(); |
| super.checkPermission(perm); |
| } |
| |
| public void checkPermission(Permission perm, Object context) { |
| System.out.println("checkPermission: " + perm + ", " + context); |
| denyIfAppropriate(); |
| super.checkPermission(perm, context); |
| } |
| } |