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);
}
}