JAVA SecurityManager - 具有多个操作的自定义 BasicPermission

Posted

技术标签:

【中文标题】JAVA SecurityManager - 具有多个操作的自定义 BasicPermission【英文标题】:JAVA SecurityManager - custom BasicPermission with multiple actions 【发布时间】:2013-03-27 16:19:01 【问题描述】:

我创建了以下策略文件:

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

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

非常感谢, 弗拉德

【问题讨论】:

【参考方案1】:

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

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

(一般来说,我建议尽快摆脱“Java 2 安全模型”。相反,使用一个检查方法返回一个对象,该对象能够在没有进一步安全检查的情况下执行特权操作(一个 对象-capability 术语)。在更高层的代码中做同样的事情。)

【讨论】:

以上是关于JAVA SecurityManager - 具有多个操作的自定义 BasicPermission的主要内容,如果未能解决你的问题,请参考以下文章

Java SecurityManager 多线程

java基础系列--SecurityManager入门(转)

java中的SecurityManager有没有办法选择性地授予ReflectPermission(“suppressAccessChecks”)?

我可以信任 Java SecurityManager 沙箱吗?

带有SecurityManager策略文件的Java Shipping JAR

如何在 Java 中使用启用的 SecurityManager 创建 newInstance