0

我创建了以下策略文件:

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" ) );

即使我的策略同时指定“使用”和“保存”,这似乎也不起作用,我应该怎么做才能提供这样的功能?

非常感谢,弗拉德

4

1 回答 1

0

通常,权限构造函数有三种风格:无参数、namenameand actions。我没有你的源代码StackPermissions(我建议把它放在一个非默认包中,顺便说一句),但我猜你刚刚得到name但正在把它当作action. 有点遗憾的是,Java 允许构造函数即使在 arity 上也可以重载。

因此,将类放在一个命名包中,并在类和策略文件中的name前面添加一个。action

(一般来说,我建议尽快摆脱“Java 2 安全模型”。取而代之的是一个检查方法,它返回一个能够执行特权操作而无需进一步安全检查的对象(术语中的对象能力) . 在更高层的代码中做同样的事情。)

于 2013-03-28T13:25:53.343 回答