当前页面: 开发资料首页 → Java 专题 → 使用安全管理器运行程序 
使用安全管理器运行程序 
摘要: 使用安全管理器运行程序  
                     </td>
              </tr>
              <tr>
                <td height="35" valign="top" class="ArticleTeitle"><table width="682" height="47" border="0">
                  <tr>
                    <td width="406">
使用安全管理器运行程序
一、默认的安全管理器
先看RunShowFile.java和ShowFile.java
import java.io.*;
public class RunShowFile{
     public static void main(String args[]) throws IOException{
        ShowFile t=new ShowFile();
        String s=t.go(args[0]);
       
        System.out.println(s);
        System.out.println("Over");
     }
}</td><td width="266">
</td>
                  </tr></table> import java.io.*;
public class ShowFile{
     public String go(String name) throws IOException{
        String s;
        String content="";
        BufferedReader in;
        in = new BufferedReader(new FileReader(name));
        while ((s = in.readLine( )) != null) {
           content+=s+"\n";
        }
        return content;
     }
}
   假设当前目录为c:\java,我们指定一个命令行选项,在命令行输入:
C:\java>java  -Djava.security.manager RunShowFile c:\\4.java
  这样,将使用默认的安全管理器来运行程序RunShowFile.class,结果如下。
Exception in thread "main" java.security.AccessControlException: access denied (
java.io.FilePermission c:\4.java read)
        at java.security.AccessControlContext.checkPermission(Unknown Source)
        at java.security.AccessController.checkPermission(Unknown Source)
        at java.lang.SecurityManager.checkPermission(Unknown Source)
        at java.lang.SecurityManager.checkRead(Unknown Source)
        at java.io.FileInputStream.(Unknown Source)
        at java.io.FileInputStream.(Unknown Source)
        at java.io.FileReader.(Unknown Source)
        at ShowFile.go(ShowFile.java:7)
        at RunShowFile.main(RunShowFile.java:6)
C:\java>
    这是因为默认的安全管理器只允许程序运行访问当前目录下的文件。而c:\4.java不在当前目录下。
二、自定义安全管理器
import java.io.*;
public class MySecurityManager extends SecurityManager {
  public void checkRead(String file) {
    if ( !(file.endsWith(".txt"))
                    && !(file.endsWith(".java"))
                    && !(file.endsWith(".class"))
                    && !(file.startsWith("C:\\j2sdk1.4.0")) ) {
      throw new SecurityException ("No Read Permission for : " + file);
    }
  }
}
这个安全管理器允许程序访问任意目录下的java文件,使用自定义的安全管理器运行:
C:\java>java  -Djava.security.manager=MySecurityManager RunShowFile c:\\4.java
import java.io.*;
public class MySecurityManager extends SecurityManager {
...
Over
C:\java>
三、在程序中设置安全管理器
  不仅在命令行,而且在程序中可以直接指定安全管理器,如下如示:
  System.setSecurityManager( new MySecurityManager( ));//自定义的安全管理器
或:System.setSecurityManager( new java.lang.SecurityManager( ));  //默认的安全管理器
</td>
              </tr>
              <tr>
                
                    
 
↑返回目录 
前一篇: 一个排序的例子  
 
后一篇: 等待提示框