什么时候Java安全“暗示”函数被调用?

时间:2014-01-10 02:49:15

标签: java security permissions

如果要定义新类型的权限,则必须实现抽象类java.security.Permission。所以你需要定义隐含函数。这些函数何时被调用?

1 个答案:

答案 0 :(得分:0)

所以,显而易见的答案是你打开自己喜欢的IDE然后问它。有很多废话,但PermissionsProtectionDomainimplies方法中使用它。

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

如果我们想知道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安全模型或库的粉丝。)