安全管理器是一个允许应用程序实现安全策略的类。它允许应用程序在执行一个可能不安全或敏感的操作前确定该操作是什么,以及是否是在允许执行该操作的安全上下文中执行它。应用程序可以允许或不允许该操作。
SecurityManager类包含了很多名称以单词check开头的方法。Java 库中的各种方法在执行某些潜在的敏感操作前可以调用这些方法。对checkXXX方法的典型调用如下:
SecurityManager security = System.getSecurityManager();
if (security != null) { security.checkXXX(argument,...); }
安全管理器通过抛出异常来提供阻止操作完成的机会。如果允许执行该操作,则安全管理器例程只是简单地返回,但如果不允许执行该操作,则抛出一个SecurityException。该约定的唯一例外是checkTopLevelWindow,它返回boolean值。
获取和设置当前的安全管理器是由System类中的getSecurityManager和setSecurityManager方法处理的。
特殊方法checkPermission(java.security.Permission)确定是应该允许还是拒绝由指定权限所指示的访问请求。默认的实现调用AccessController.checkPermission(perm);如果允许访问请求,则安静地返回checkPermission。如果拒绝访问请求,则抛出SecurityException。从Java 2 SDK v1.2 开始,SecurityManager中其他所有check方法的默认实现都是调用SecurityManager.checkPermission方法来确定调用线程是否具有执行所请求操作的权限。
创建安全管理器步骤:
(1)创建一个SecurityManager的子类;
(2)覆盖或创建一些方法。
创建安全管理器
public class PasswordSecurityManager extends SecurityManager{
private String password;
PasswordSecurityManager(String password) {
super();
this.password = password;
}
public boolean accessOK(String password) {
if(this.password.equals(password)) return true;
else return false;
}
}
利用安全管理器
public static void main(String args[]){
PasswordSecurityManager manager = new PasswordSecurityManager("123456");
if(!manager.accessOK(args[0])) return;