【问题标题】:Restrict non-iPOJO services being installed in OSGI限制在 OSGI 中安装的非 iPOJO 服务
【发布时间】:2016-02-07 13:43:09
【问题描述】:

我目前正在尝试找到一种在 OSGI 中“过滤”捆绑包的方法,同时安装它们。我使用 Karaf 作为 OSGI 实现,使用 iPOJO 进行服务解析。 有什么办法可以确保只有 iPOJO 提供的服务才能安装在 OSGI 中?

我已经在网上搜索了查看特定服务是否导入 OSGI 内容(如 BundleContext 等)的方法,但这似乎并不容易。

谢谢你:)

【问题讨论】:

  • 您能否详细说明您想要实现的目标?

标签: java eclipse osgi ipojo


【解决方案1】:

可能不会,我不建议这样做。服务的发布方式最好考虑为特定于实现的细节。如果您想搜索您的图书馆提供的服务,那么最好在您的服务中添加一个自定义键值属性(不知道如何使用 iPOJO 执行此操作)并在您的 LDAP 过滤器中使用该键。

edit:所提供的服务唯一对外可见的特征是类名和键值服务属性,所以如果你在那里找不到任何关于 iPOJO 的合理信息,那么你没有太多机会

【讨论】:

  • 感谢您的回复。问题是我无法控制“我的”服务是什么,什么不是。计划是建立某种 repo 或数据库,人们可以在其中上传 OSGI 包。为了确保安全,我需要知道这个给定软件包的服务是否由 iPOJO 提供,并且仅由 iPOJO 提供。
  • 为什么? iPOJO 并不是安全提供服务的唯一方式。
  • 虽然不完美,但是可以查看instance.name属性是否与服务一起发布。它为您提供提供服务的实例的名称并自动发布。
  • 我仍然不明白您为什么要将捆绑包限制为使用 iPOJO。 iPOJO 没有任何问题,我非常喜欢它,但还有其他完全有效的发布服务方式。
  • 是的,但是如果我不将其限制为仅 iPOJO,则可以手动注册服务,这会破坏我的整个安全系统,因为我无法控制依赖关系等。
【解决方案2】:

我找到了解决问题的方法...我有点像 erosb 建议的那样去做了。 每个 IPOJO 服务引用都拥有属性“name”,所以我刚刚为 @Bind 方法创建了一个 LDAP 过滤器,它接受 name-property(filter = "(instance.name=*) 的所有值。 不是使用 iPOJO 创建的服务没有该字段,因此我可以过滤任何 iPOJO 服务。

非常感谢 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 2019-04-15
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    相关资源
    最近更新 更多