都是些写个自己的一些废话或者心得,不是什么技术文章,也完全没什么资本给别人扯技术..
虽然自己实现SecurityManager 不是什么好事,毕竟不如实现permission方便和安全,但是偶还是比较想了解哈.不知道别的同胞在实现时候有没有遇到这样的问题,典型的重写checkPermission方法如下:
public void checkPermission(Permission p){
if(p instanceof somePermission)//需要进行附加验证的permission,当然最好的实现办法
//是实现新的permission
myCheck();//自己的验证
.............
super.checkPermission(p);
}
这样会产生一个典型的调用过程是myCheck()本身调用多次MySecurityManger进行用样的严整:
Class MySecurityManager->Class SecurityManager->loop....->MyApp
解决方法用个这样的小函数去处重复验证:
private boolean inSameManager()
{
Class[] cc = getClassContext();
// skip past current set of calls to this manager
int i = 0;
while (i < cc.length && cc[0] == cc[i])
i++;
// check if there is another call to this manager
while (i < cc.length)
{
if (cc[0] == cc[i]) return true;
i++;
}
return false;
}
这是在core java II 7th(确实是好书,不过大家要看我推荐原版)书里的,例子虽小,确实经典,我是以前打死没想到过,记到这里,以便以后查阅,哈哈.