如果要定义新类型的权限,则必须实现抽象类java.security.Permission。所以你需要定义隐含函数。这些函数何时被调用?
答案 0 :(得分:0)
所以,显而易见的答案是你打开自己喜欢的IDE然后问它。有很多废话,但Permissions
和ProtectionDomain
在implies
方法中使用它。
因此,让我们从有趣的地方开始,并尝试找出发生了什么。
如果我们想知道acc是否允许特权,那么 AccessControlContext.checkPermission
是一种有趣的方法。在AccessControlContext.checkPermission
的调试混乱中,调用ProtectionDomain.implies
(通过context[i]
)。似乎合理,堆栈中的每个ProtectionDomain
“都需要允许权限。
ProtectionDomain.implies
上的{p> implies
课程PermissionCollection
。很公平。
PermissionCollection
是一个抽象类,但Permissions
是API文档指向我们的实现。这会在implies
Set
上拨打Permission
,对吗?拿去。它为PermissionCollection
的每种类型(实施)创建了专家Permission
。
专家系列是java.security
设计中非常多毛的部分。举一个例子,FilePermission.newPermissionCollection
(我在输入时畏缩)返回一个FilePermissionCollection
(仅出现在API文档中,以便在不需要的情况下进行序列化 - 诅咒Java序列化)。 FilePemrissionCollection.implies
是一种优化,不会调用FilePermission.implies
,但会推断其实现。
因此通常不会调用Permission.implies
。而是使用优化版本形式Permission.newPermissionCollection
。
(我不是Java 2安全模型或库的粉丝。)