2014-01-10 46 views

回答

0

所以,显而易见的答案是你打开你最喜欢的IDE并提出问题。有很多废话,但PermissionsProtectionDomain在其implies方法中使用它。

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

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

ProtectionDomain.implies class implies on PermissionCollection。很公平。

PermissionCollection是一个抽象类,但Permissions是API文档指出的实现。这将打电话impliesSetPermission,对吧?拿去。它为Permission的每种类型(实现)创建专家PermissionCollection

专家收藏是java.security设计的一个非常多毛的部分。举一个例子,FilePermission.newPermissionCollection(我在键入时返回)返回一个FilePermissionCollection(只出现在API文档中用于不需要的序列化目的 - 诅咒Java序列化)。 FilePemrissionCollection.implies是一个优化,它不会调用FilePermission.implies,但推断其实现。因此通常不会调用Permission.implies。代替使用Permission.newPermissionCollection的优化版本。

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

相关问题