我创建了以下策略文件:
grant {
permission StackPermission "use,save";
};
为了访问它,我使用以下参数运行我的JVM:
-Djava.security.manager -Djava.security.policy=my.policy
我的代码如下所示:
SecurityManager sec = System.getSecurityManager();
sec.checkPermission( new StackPermission( "use,save" ) );
一切都很好,但我想更精细,而不检查“保存”动作:
sec.checkPermission( new StackPermission( "use" ) );
即使我的策略同时指定“使用”和“保存”,这似乎不起作用,我该怎么做才能提供这样的功能?
非常感谢, 维拉德
答案 0 :(得分:0)
通常,权限构造函数有三种形式:no-args,name
,name
和actions
。我没有你StackPermissions
的源代码(我建议把它放在一个非默认的包中,顺便说一下),但我猜你刚刚得到name
但是它就像对待它一样action
。有点遗憾,Java允许构造函数在arity上过载。
因此,将该类放在命名包中,并在类和策略文件中的name
之前添加action
。
(一般情况下,我建议尽快远离“Java 2安全模型”。而是使用一个检查方法返回一个能够执行特权操作而无需进一步安全检查的对象(对象语言中的“能力”。在较高层的代码中执行相同的操作。)