当您要定义一种新的权限类型时,必须实现抽象类java.security.Permission。因此,您需要定义隐含函数。这些函数什么时候调用?

最佳答案

因此,显而易见的答案是您打开自己喜欢的IDE并提出了要求。废话很多,但PermissionsProtectionDomain也在其implies方法中使用它。

因此,让我们从有趣的地方入手,并尝试找出正在发生的事情。

如果我们想知道acc是否允许特权,AccessControlContext.checkPermission是一种有趣的方法。 AccessControlContext.checkPermission的调试混乱是对ProtectionDomain.implies的调用(通过context[i])。似乎合理,每个“堆栈”中的ProtectionDomain需要许可。

ProtectionDomain.implies在其implies上的类PermissionCollection。很公平。

PermissionCollection是一个抽象类,但是Permissions是API文档指向我们的实现。这将在impliesSet上调用Permission,对吗?不它为PermissionCollection的每种类型(实现)创建一个专家Permission

专家收藏是java.security设计中真正多毛的部分。举个例子,FilePermission.newPermissionCollection(键入时我退缩)返回一个FilePermissionCollection(仅在API文档中出于不需要进行序列化的目的出现-诅咒Java序列化)。 FilePemrissionCollection.implies是一种优化,它不调用FilePermission.implies,而是推断其实现。

因此,通常根本不调用Permission.implies。而是使用优化的版本形式Permission.newPermissionCollection

(我不喜欢Java 2安全模型或库。)

10-06 15:20