当您要定义一种新的权限类型时,必须实现抽象类java.security.Permission。因此,您需要定义隐含函数。这些函数什么时候调用?
最佳答案
因此,显而易见的答案是您打开自己喜欢的IDE并提出了要求。废话很多,但Permissions
和ProtectionDomain
也在其implies
方法中使用它。
因此,让我们从有趣的地方入手,并尝试找出正在发生的事情。
如果我们想知道acc是否允许特权,AccessControlContext.checkPermission
是一种有趣的方法。 AccessControlContext.checkPermission
的调试混乱是对ProtectionDomain.implies
的调用(通过context[i]
)。似乎合理,每个“堆栈”中的ProtectionDomain
需要许可。ProtectionDomain.implies
在其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安全模型或库。)