`
security
  • 浏览: 372380 次
  • 来自: www.pgp.org.cn
社区版块
存档分类
最新评论

JVM是怎樣進行授權控制的

阅读更多

原文见诸于http://www.matrix.org.cn/thread.shtml?topicId=41625&forumId=55
有网友提出疑问,

假設JVM已開啟了SecurityManager,并且JASS的登陸模塊等也正常運作,且授權策略文件醒置正確,用戶也已正確地成功地被驗証。如果不執行Subject.doAs()或Subject.doAsPrivileged()方法,JVM會對其它任何方法調用執行權限檢查嗎?如果會,其具的實現過程又是怎樣的? 

JAAS授權模型中對下面的情況講得好清楚:
  JVM由一个名为 SecurityManager 的类负责实施系统安全策略。在默认情况下不安装安全管理器,必须通过一个在启动时传递给 JVM 的一個名为 java.security.manager 的环境变量显式地指定。任何应用程序都可找到安装的 SecurityManager 并调用它相应的 check<XXX> 方法。
  对 SecurityManager 类进行的所有 check<XXX> 方法调用都解释为相应的 Permission 对象,并将它作为输入参数传递给 AccessController 类的 checkPermission() 方法。 AccessController 类有一个名为 doPrivileged 的方法。doPrivileged 方法以一个类型为 PrivilegedAction 的对象作为输入。PrivilegedAction 的对象有一个名为 run() 的方法,如果想實現一個執行權限檢查的操作,需從PirvilegedAction中擴展,並在run()方法中實現自己的業務邏輯即可。但問題是,如果不是從PirvilegedAction中擴展的類,那麼調用其中的方法JVM還會不會執行權限檢查?

從java API中可以看到,Subject.doAs()或Subject.doAsPrivileged()方法都以PrivilegedAction作為參數輸入的。

我做了一个小的形象总结:
通常来说,所有在JVM中执行的方法都回进行权限检查,except 那些由JVM引导的类,比如FileOutputStream和FileInputStream,你也明白你能够利用FileOuptStream做点什么坏事了,呵呵,于是你写了一个干坏事的类叫做EsunPirvilegedAction Class,这个类往用户的user.home写入n个1G的文件,这个类调用JVM不经过权限检查的FileOuptStream类。
问题在于,JVM虽然不检查FileOuptStream类,但会检查所有在JVM运行中未被授权的类,包括你的
EsunPirvilegedAction类,是否具有权限(判别标准就是C:\yourjdk\jre\lib\security\java.policy)。

1,Permission对象如何Load入,可以看看SecurityManager机制
2,AccessController 类执行checkPermission() 方法,所有不信任的类都不能逃过次"劫",当然,你可以叫所有Client都在其java.policy为你的创建一个Permission。
3,PrivilegedAction是你的EsunPirvilegedAction类所必需实现的方法,否则SecurityManager不理你。

总结性——Java有自己的信任体系,它引导的类以及它的扩展类都不需要checkPermission,你写的要checkPermission。
<!---->

分享到:
评论

相关推荐

    FCat企业级基础功能框架-其他

    10、JWT 提供了一种用于发布接入令牌(Access Token),并对发布的签名接入令牌进行验证的方法。 令牌(Token)本身包含了一系列声明,应用程序可以根据这些声明限制用户对资源的访问。 11、Config 配置文件统一管理 ...

    JAVA上百实例源码以及开源项目

    发送消息,同时对文本进行少量修改,发送end-of-messages消息,最后关闭连接。 Tcp服务端与客户端的JAVA实例源代码 2个目标文件 摘要:Java源码,文件操作,TCP,服务器  Tcp服务端与客户端的JAVA实例源代码,一个简单...

    java开源包1

    JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...

    java开源包11

    JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...

    java开源包2

    JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...

    java开源包3

    JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...

    java开源包6

    JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...

    java开源包5

    JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...

    java开源包10

    JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...

    java开源包4

    JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...

    java开源包8

    JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...

    JAVA上百实例源码以及开源项目源代码

    发送消息,同时对文本进行少量修改,发送end-of-messages消息,最后关闭连接。 Tcp服务端与客户端的JAVA实例源代码 2个目标文件 摘要:Java源码,文件操作,TCP,服务器 Tcp服务端与客户端的JAVA实例源代码,一个简单的...

    java开源包7

    JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...

    java开源包9

    JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...

    java开源包101

    JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...

    Java资源包01

    JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

    基本信息 作者: 林信良 丛书名: 学习笔记 出版社:清华大学出版社 ISBN:9787302282082 上架时间:2012-5-9 出版日期:2012 年5月 开本:16开 页码:564 版次:1-1 所属分类:计算机 &gt; 软件...b.4 进行crud操作 562

    Smack:一个模块化的可移植的开源XMPP客户端库,用Java编写,适用于Android和Java(SE)VM

    是用Java编写的开放源代码,高度模块化,易于使用的XMPP客户端库,用于Java SE兼容的JVM和Android。 它是纯Java库,可以嵌入到您的应用程序中,以创建从完整的XMPP即时消息客户端到简单的XMPP集成(例如发送通知...

    二十三种设计模式【PDF版】

    以 Jive 为例,剖析代理模式在用户级别授权机制上的应用 设计模式之 Facade(门面?) 可扩展的使用 JDBC针对不同的数据库编程,Facade提供了一种灵活的实现. 设计模式之 Composite(组合) 就是将类用树形结构组合成...

Global site tag (gtag.js) - Google Analytics