当前页面: 开发资料首页 → 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>
↑返回目录
前一篇: 一个排序的例子
后一篇: 等待提示框