【问题标题】:When are Java security "implies" functions called?何时调用 Java 安全“隐含”函数?
【发布时间】:2014-01-28 21:32:44
【问题描述】:

当你想定义一种新的权限类型时,你必须实现抽象类java.security.Permission。所以你需要定义隐含函数。什么时候调用这些函数?

【问题讨论】:

  • 您已经添加了 API 文档,对吧?哪一部分你不明白?你的问题的答案就在那里。

标签: java security permissions


【解决方案1】:

因此,显而易见的答案是您打开自己喜欢的 IDE 并询问它。废话很多,不过PermissionsProtectionDomain在他们的implies方法中也用到了。

所以让我们从有趣的地方开始,试着找出发生了什么。

AccessControlContext.checkPermission 是一个有趣的方法,如果我们想知道 acc 是否允许特权。在AccessControlContext.checkPermission 的调试混乱中是对ProtectionDomain.implies 的调用(通过context[i])。似乎合理,每个ProtectionDomain“在堆栈中”都需要允许权限。

ProtectionDomain.impliesimplies 在其PermissionCollection 上。很公平。

PermissionCollection 是一个抽象类,但Permissions 是 API 文档指向我们的实现。这将在PermissionSet 上调用implies,对吗?不。它正在为Permission 的每种类型(实现)创建一个专家PermissionCollection

专家系列是java.security 设计的一个非常复杂的部分。举个例子,FilePermission.newPermissionCollection(我在输入时畏缩)返回一个FilePermissionCollection(仅出现在 API 文档中用于序列化目的,这是不必要的 - 诅咒你 Java 序列化)。 FilePemrissionCollection.implies 是一种优化,不调用FilePermission.implies,而是推断其实现。

所以通常Permission.implies 根本不会被调用。改用优化版形式Permission.newPermissionCollection

(我不是 Java 2 安全模型或库的粉丝。)

【讨论】:

    猜你喜欢
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-25
    • 2017-03-26
    相关资源
    最近更新 更多