关于Java SecurityManager

11月28日
关于Java SecurityManager

最近看到一道题问:

Which five statements about SecurityManager are true?(Choose five.)
A. The SecurityManager must be instantiated to use RMI. 
B. The SecurityManager can be discarded after loading.
C. The SecurityManager can be configured from a per-user file.
D. The SecurityManager can be configured from a system-wide file.
E. The SecurityManager can be installed in the application code.
F. The SecurityManager can be installed from the command line.
G. The SecurityManager can be configured from a file specified on the common line.  

这是一个安全方面的问题。题中提到的SecurityManager实际上指的是java.lang.SecurityManager。

SecurityManager是一个Java类(Java 1.2以前是一个抽象类),应用程序可以通过它实现一个安全策略。它允许应用程序在调用可能的不安全的或是敏感的操作前检查这个操作到底是什么;以及它在当前的上下文中是否被允许运行。

我们可以通过如下方法获得当前的SecurityManager:

SecurityManager security = System.getSecurityManager();

同样,我们也可以付给当前一个新的SecurityManager:

SecurityManager sm = new SecurityManager();

System.setSecurityManager(sm);

但前提是上一个SecurityManager允许我们创建一个新的来取代他,这个定义在java.policy文件中:

permission java.lang.RuntimePermission "createSecurityManager";

默认的java.policy文件中似乎没有该项。

好了,说了这么多废话,现在我们切入正题:到底哪5个答案是对的呢?我们来一个一个分析。<<其实这个题的答案是我从题库中找来的,回过头来看看我的分析,感觉有些不对劲,似乎是题库的答案错了。下面的黑体字是我认为正确的答案!>>

A. The SecurityManager must be instantiated to use RMI.

我英语水平有限,这个"to use RMI"是“用RMI来实例化SecurityManager”还是“为了使用RMI而实例化SecurityManager”的意思呢?不管是哪个,都是不正确的。使用RMI实例化SecurityManager就是胡扯。而SecurityManager的确有一个关于RMI的子类,叫RMISecurityManager。它是用于RMI从远程下载代码的。没有安装这个类的实例,RMI是不会干活的。尽管这样,A也是不对的。 <<既然没有SecurityManager,RMI就不能正常下载远程代码,那我觉得这个选项就是对的——SecurityManager必须被实例化以用来使用RMI>>

B. The SecurityManager can be discarded after loading.

关于这个选项我是这样理解的:SecurityManager一旦被加载了就不能被抛弃,只能被一个新的所覆盖。而具体能不能覆盖也还要看当前SecurityManager的脸色。所以我认为这个选项也是不对的。

这下,剩下的选项就都是对的了,我们来一个一个分析:

C. The SecurityManager can be configured from a per-user file.

哈哈,关于这个选项的实例我还没有找到,等找到了再写在这里,我相信SecurityManager有这么“强大”的功能:P <<既然找不到例子,就等于说这个选项是不对的!>>

D. The SecurityManager can be configured from a system-wide file.

也就是说SecurityManager可以用一个系统中的文件进行配置,而不只是${Java_Home}/jre/lib/security/java.policy文件。一个例子是我们可以使用-Djava.security.policy=或是-Djava.security.policy==来指定策略文件的位置,其中=表示这个策略文件将和默认的策略文件一同发挥作用;==表示只使用这个策略文件。

E. The SecurityManager can be installed in the application code.

下面就是一段这样的代码:

SecurityManager sm = new SecurityManager();
System.setSecurityManager(sm);
if (sm != null) {
Permission p = new FilePermission("/temp/*", "write");
System.out.println(p.getActions());
sm.checkPermission(p); 
}

在某些J2EE Server的配置文件中也可以配置安全策略,如:

      <weblogic-enterprise-bean>
  <!-- webLogic enterprise bean statements go here -->
  </weblogic-enterprise-bean>
  <security-role-assignment>
  <!-- the optional security role assignments go here -->
  </security-role-assignment>
  <security-permission>
  <description>
  grant permission to special folder
  </description>
  <security-permission-spec>
  grant {
  permission java.io.FilePermission "D:/temp", "read";
        };
      <security-permission-spec>
      <security-permission>

F. The SecurityManager can be installed from the command line.

命令如下:

-Djava.security.manager=org.faquir.MySecurityManager

G. The SecurityManager can be configured from a file specified on the common line.

这个例子也就是D中提到的那个。

OK,这个题的答案就是C、D、E、F、G。 <<所以,改正后的答案是A、D、E、F、G>>

 

 

转自:http://yichen914.spaces.live.com/blog/cns!723590D920FAF62B!630.entry

 

备注:关于答案,我认同是C 、D、E、F、G;  RMISecurityManager是为了RMI创建实例化才对;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值