1import java.lang.reflect.Member; 2import java.security.Permission; 3 4public class Enforcer extends SecurityManager { 5 public static final Enforcer THE_ONE = new Enforcer(); 6 7 /** whether to deny the next request */ 8 private boolean deny; 9 10 /** 11 * Not publicly constructable. Use {@link #THE_ONE}. 12 */ 13 private Enforcer() { 14 deny = false; 15 } 16 17 /** 18 * Deny the next request. 19 */ 20 public void denyNext() { 21 deny = true; 22 } 23 24 /** 25 * Throw an exception if the instance had been asked to deny a request. 26 */ 27 private void denyIfAppropriate() { 28 if (deny) { 29 deny = false; 30 throw new SecurityException("Denied!"); 31 } 32 } 33 34 public void checkPackageAccess(String pkg) { 35 System.out.println("checkPackageAccess: " + pkg); 36 denyIfAppropriate(); 37 super.checkPackageAccess(pkg); 38 } 39 40 public void checkMemberAccess(Class c, int which) { 41 String member; 42 43 switch (which) { 44 case Member.DECLARED: member = "DECLARED"; break; 45 case Member.PUBLIC: member = "PUBLIC"; break; 46 default: member = "<" + which + ">?"; break; 47 } 48 49 System.out.println("checkMemberAccess: " + c.getName() + ", " + 50 member); 51 denyIfAppropriate(); 52 super.checkMemberAccess(c, which); 53 } 54 55 public void checkPermission(Permission perm) { 56 System.out.println("checkPermission: " + perm); 57 denyIfAppropriate(); 58 super.checkPermission(perm); 59 } 60 61 public void checkPermission(Permission perm, Object context) { 62 System.out.println("checkPermission: " + perm + ", " + context); 63 denyIfAppropriate(); 64 super.checkPermission(perm, context); 65 } 66} 67