【发布时间】:2014-01-28 21:32:44
【问题描述】:
当你想定义一种新的权限类型时,你必须实现抽象类java.security.Permission。所以你需要定义隐含函数。什么时候调用这些函数?
【问题讨论】:
-
您已经添加了 API 文档,对吧?哪一部分你不明白?你的问题的答案就在那里。
标签: java security permissions
当你想定义一种新的权限类型时,你必须实现抽象类java.security.Permission。所以你需要定义隐含函数。什么时候调用这些函数?
【问题讨论】:
标签: java security permissions
因此,显而易见的答案是您打开自己喜欢的 IDE 并询问它。废话很多,不过Permissions和ProtectionDomain在他们的implies方法中也用到了。
所以让我们从有趣的地方开始,试着找出发生了什么。
AccessControlContext.checkPermission 是一个有趣的方法,如果我们想知道 acc 是否允许特权。在AccessControlContext.checkPermission 的调试混乱中是对ProtectionDomain.implies 的调用(通过context[i])。似乎合理,每个ProtectionDomain“在堆栈中”都需要允许权限。
ProtectionDomain.implies 类implies 在其PermissionCollection 上。很公平。
PermissionCollection 是一个抽象类,但Permissions 是 API 文档指向我们的实现。这将在Permission 的Set 上调用implies,对吗?不。它正在为Permission 的每种类型(实现)创建一个专家PermissionCollection。
专家系列是java.security 设计的一个非常复杂的部分。举个例子,FilePermission.newPermissionCollection(我在输入时畏缩)返回一个FilePermissionCollection(仅出现在 API 文档中用于序列化目的,这是不必要的 - 诅咒你 Java 序列化)。 FilePemrissionCollection.implies 是一种优化,不调用FilePermission.implies,而是推断其实现。
所以通常Permission.implies 根本不会被调用。改用优化版形式Permission.newPermissionCollection。
(我不是 Java 2 安全模型或库的粉丝。)
【讨论】: