当谈到java安全机制的原理时,自然想到类SecurityManager。
当判断某个方法是非有权限执行时,都是采用如下方式:在该方法的开始地方check是非有权限。
例如,判定calling Thread 是非可以加载某类库时,
代码如下(取自loadLibrary0(Class fromClass, String libname)方法):
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkLink(libname);
}
像大致这样的代码遍布的java源码的各个角落,这样觉得太不好了.
比如上面代码,如果以后需要改变loadLibrary0方法的权限,怎么办呢?
你或许会说,修改SecurityManager中的checkLink不就行了吗? 这个肯定不行的,SecurityManager是个公共类,修改它或许会影响到其他地方。
你或许会想,在SecurityManager中新增一个方法,取名为checkLinkToLib,然后再修改上面提到的loadLibrary0方法。
这样做可以保证不影响其他,但是一个小小的需求却改动了两个地方,好像不是我们所情愿的。
============分割线=====================
我能想到的:对于现在安全机制的解决办法,是面向切面编程,这样灵活性就更大了。