【问题标题】:Apache Felix set Classloader to restrict class access on AndroidApache Felix 设置 Classloader 以限制 Android 上的类访问
【发布时间】:2013-03-04 12:07:56
【问题描述】:

我在 Android 应用程序中将 Apache Felix 作为捆绑加载程序运行。 由于那里无法访问 Jaca SecurityManager,我正在寻找一种解决方案来防止捆绑包访问某些包,例如 java.io.*。 只编写一个自定义类加载器,在请求此类时返回 null 或抛出异常的想法似乎是最好的,但是,我找不到如何为 Felix 管理的所有包设置全局类加载器。

【问题讨论】:

    标签: java android osgi classloader apache-felix


    【解决方案1】:

    尝试设置此属性:

    org.osgi.framework.system.packages - 指定一个逗号分隔的列表 应通过 System Bundle 从 框架类加载器。该框架会将其设置为合理的 默认。如果指定了值,它将替换任何默认值。

    默认情况下,所有 java.* 类对任何包都是可见的。如果您覆盖它,您可以更改该行为。尝试导入您未包含的包(例如 java.io)的包在安装期间将无法解析,因此无法启动。

    更多信息请参见:http://felix.apache.org/site/apache-felix-framework-configuration-properties.html

    【讨论】:

    • 这只有在bundle声明了对java.*包的import时才有效,而bundle不应该这样做。 OSGi 规范授予对所有 java.* 包的所有捆绑访问权限,而无需导入它们。但是如果包自愿导入它们使用的所有 java.* 包,那么这个“技巧”可能会阻止它们解析。
    • @BJ Hargrave :这是被问到的,一种阻止捆绑使用某些 java.* 包的方法....这当然不遵循 OSGi 规范,但如果你需要这样做无论出于何种原因,在您自己的应用程序中,我认为这样做没有害处。
    • 如果包没有在 java* 包上声明导入,我相信当你实际尝试使用一个不允许的类时,你只会在运行时得到一个 ClassDefNotFound,所以这个'技巧'应该仍然有效,因为它可以防止在 java 中使用某些类。*
    • 通常捆绑包不能导入 java.* 包。捆绑包对 java.* 包具有完全访问权限,无论捆绑包是否导入它们。您所做的就是让捆绑包自愿同意如果他们使用一些您不愿意提供给他们的 java.* 包,则无法解决。
    • 经过进一步调查,这似乎是真的,这个想法对我的情况没有帮助。这个想法是我对所有将要运行的包没有完全的权力,所以我不能依赖它们自愿声明要求。我确实需要一种方法,真正从加载器中删除整个类树或以其他方式阻止它
    猜你喜欢
    • 2014-08-10
    • 2013-07-14
    • 2018-08-26
    • 2013-02-19
    • 1970-01-01
    • 2012-03-23
    • 2011-09-11
    • 2012-04-29
    • 1970-01-01
    相关资源
    最近更新 更多