TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
- 使用安全管理器运行程序
- 一、默认的安全管理器
- 先看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");
- }
- }
复制代码
- 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+"
- ";
- }
- 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( )); //默认的安全管理器
-
-
-
复制代码
|
|