锁定老帖子 主题:Java安全机制实现的不合理性
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-12-11
最后修改:2010-12-11
当判断某个方法是非有权限执行时,都是采用如下方式:在该方法的开始地方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方法。 这样做可以保证不影响其他,但是一个小小的需求却改动了两个地方,好像不是我们所情愿的。 ============分割线===================== 我能想到的:对于现在安全机制的解决办法,是面向切面编程,这样灵活性就更大了。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-12-11
权限这个东西就这么繁琐,不止是java的问题,它本身就是那样。
对应用来讲,是可以做到一定程度功能和权限分离的。 对底层服务来讲,检查权限通常就是程序的一部分。 |
|
返回顶楼 | |
发表时间:2010-12-11
taolei0628 写道 权限这个东西就这么繁琐,不止是java的问题,它本身就是那样。
对应用来讲,是可以做到一定程度功能和权限分离的。 对底层服务来讲,检查权限通常就是程序的一部分。 JVM比loadLibrary还要底层些。 |
|
返回顶楼 | |
发表时间:2010-12-11
这个是基础类库不是应用系统,不需要那么灵活。按照软件设计的理论,越是底层的,被依赖的越趋近于稳定。
这还不包括在性能,稳定性,可维护性等的权衡。 当然楼主说的也有道理 |
|
返回顶楼 | |
发表时间:2010-12-12
不是可以使用策略文件么?
grant codeBase "file:....." { permission java.io.FilePermission "a.txt" "read" } |
|
返回顶楼 | |
发表时间:2010-12-13
yangyi 写道 这个是基础类库不是应用系统,不需要那么灵活。按照软件设计的理论,越是底层的,被依赖的越趋近于稳定。
这还不包括在性能,稳定性,可维护性等的权衡。 当然楼主说的也有道理 + |
|
返回顶楼 | |
发表时间:2010-12-13
面向切面的话,要使用动态代理来实现吧,这样性能好像有影响
|
|
返回顶楼 | |
发表时间:2010-12-13
freish 写道 不是可以使用策略文件么?
grant codeBase "file:....." { permission java.io.FilePermission "a.txt" "read" } 楼上说的对,顶起! |
|
返回顶楼 | |
发表时间:2010-12-13
SecurityManager 提高一套模板实现,通过配置policy文件来控制。
底层的安全与应用级别的安全是两码事! |
|
返回顶楼 | |
发表时间:2010-12-14
mercyblitz 写道 SecurityManager 提高一套模板实现,通过配置policy文件来控制。
底层的安全与应用级别的安全是两码事! 确实,应用级别安全需求千差万别,底层安全只是追求稳定可靠通用 |
|
返回顶楼 | |