栏目分类
Meta Dance中文网 你的位置:TRIX中文网 > Meta Dance中文网 > 一个例子理解AccessController.doPrivileged()
一个例子理解AccessController.doPrivileged()
发布日期:2025-01-04 16:16 点击次数:158
示例中需要在eclipse中创建2个project:ServiceCentre和TestServicejava.policy
Project - ServiceCentre
Project
- TestService将TestService打包,放到C盘
运行这个例子的时候,会出现权限错误,把doService()修改一下,就可以顺利通过
在这个例子中AccessControlContext的stack顺序为2.
file:/D:/Workspaces/ExchangeConnect_V2_Trunk_Maven_workspace/ServiceCentre/bin/*1 .
file:/c:/TestService-1.0.jar2没有权限,1有权限,使用doPrivileged后,不检查2看一下java.security.AccessController的JavaDoc:
其中提到的no
further checking is done的意思是指stack中的checking加入一个TestService2,文件操作在1,stack为(1,2,3为checking顺序)3 .
file:/D:/Workspaces/ExchangeConnect_V2_Trunk_Maven_workspace/ServiceCentre/bin/*2 .
file:/c:/TestService-1.0.jar1.
file:/c:/TestService2-1.0.jar checking顺序为
1->2->3如果doPrivileged是在2中调用,那么1,2需要具有权限,3不再进行检查如果doPrivileged是在1中调用,那么1需要具有权限,2,3不再进行检查总结:1.
这里容易理解错误的地方是checking顺序,例如一个调用链
MethodA->MethodB->MethodC(这里的3个方法需要在3个不同的ProtectionDomain中),doPrivileged在MethodB中,很容易理解成检查A,B而不检查C,实际上stack中检查顺序为C->B->A,也就是检查C,B而不检查A2.
ServiceCentre不需要太多权限,而Service就需要使用doPrivileged来避免受到ServiceCentre的权限限制(如果service有足够的权限),Equinox中有很多这样的例子(Equinox扮演Service的角色)。
上一篇:专家学者 下一篇:力压李宇春、周笔畅 徐娇反串声演“阿童木”