gpt4 book ai didi

java - Java 安全 "implies"函数何时被调用?

转载 作者:太空宇宙 更新时间:2023-11-04 15:14:09 25 4
gpt4 key购买 nike

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

最佳答案

所以,显而易见的答案是您打开您最喜欢的 IDE 并询问它。虽然有很多废话,但 PermissionsProtectionDomain 也在它们的 implies 方法中使用了它。

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

如果我们想知道 acc 是否允许权限,

AccessControlContext.checkPermission 是一个有趣的方法。 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 安全模型或库。)

关于java - Java 安全 "implies"函数何时被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21035364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com