栏目分类
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的角色)。  

Powered by TRIX中文网 @2013-2022 RSS地图 HTML地图

Copyright Powered by365建站 © 2013-2024