站内搜索: 请输入搜索关键词

当前页面: 开发资料首页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>


↑返回目录
前一篇: 一个排序的例子
后一篇: 等待提示框