按包限制对EclipseRCP中方法的访问

按包限制对EclipseRCP中方法的访问,eclipse,security,osgi,bundle,Eclipse,Security,Osgi,Bundle,我有一个Eclipse RCP应用程序,它具有一些敏感属性。属性将根据用户输入的密钥进行加密。捆绑包/插件定义属性,以及它们是否应该加密。诀窍是:定义属性的捆绑包应该是唯一允许访问解密属性的捆绑包(默认情况下)。我理解,通常每个捆绑包都应该独立管理自己的属性,但这是不可能的,因为这些属性是从集中的位置检索的 即,我如何才能做到这一点: public byte[] getByteArrayProperty(Object id){ if (method is being called by cod

我有一个Eclipse RCP应用程序,它具有一些敏感属性。属性将根据用户输入的密钥进行加密。捆绑包/插件定义属性,以及它们是否应该加密。诀窍是:定义属性的捆绑包应该是唯一允许访问解密属性的捆绑包(默认情况下)。我理解,通常每个捆绑包都应该独立管理自己的属性,但这是不可能的,因为这些属性是从集中的位置检索的

即,我如何才能做到这一点:

public byte[] getByteArrayProperty(Object id){
 if (method is being called by code in bundle: bundleId)
   return decrypt(property);
 else
   throw new SecurityException("Bundle " + bundleId + " not authorized to access property " + id);
}
谢谢你的建议


/p

您可以使用
SecurityManager
来识别调用类,如中所述,然后检查调用类的包是否与捆绑包中的包相同。

为什么不提供一个服务(例如
PropertyRepository
),该服务将提供
storeProperty(password)
等方法,和
getProperties(password)
,它将使用调用包的id作为存储的密钥来存储/检索属性?然后每个bundle只需要生成一个唯一的密码(随机散列?),用于存储/检索。如果你愿意,你可以在一组相关的bundle中硬编码一个密码。这不是一个坏主意,但是任何人都可以通过阅读源代码来找到密码。打开安全性,只允许那些特定的bundle拥有进行该调用的权限,怎么样?这甚至可以删除密码。一些关于安全性的介绍(但osgi规范有更详细的内容):有点TMI。我想我是想把花了一周时间破译这份文件变成这个S/O问题:)这种方法有问题。我可以得到调用类的类名,但是似乎没有办法从类名中得到包。Class.forName(className)失败,因为包A中的ClassLoader不知道包B中的类,除非它们是显式导入的,这是我无法做到的。如果包的命名方式与包的命名方式不同,则必须按照中所述查询包的内容。