3

我正在开发一组服务和一个客户端 JAR 文件,该文件旨在成为调用这些服务的唯一方式。客户端 JAR 将被多个应用程序使用(都是内部的)。但是,我们希望某些服务可以用于某些客户端应用程序,而不能用于其他应用程序。

我正在尝试不同的方法来实现这个目标,但一种方法是给每个应用程序一个“上下文”值以在运行时传递。此值将表示允许该客户端应用程序的服务列表,并且服务将能够快速计算它是否在该列表中。

每个服务都有自己的 ID 值,可能作为static final变量硬编码到 Java 类中。对于每个客户端应用程序,我会汇总一个允许的服务列表,可能使用 Groovy 脚本或非常基本的 Web 应用程序。一些基于反射的代码将收集所有这些 ID 值,并生成一个代表它们的哈希值。

我会将这个“上下文”哈希与客户端 JAR 一起提供给客户端应用程序所有者,他们会在调用服务时在运行时将其传回。该服务将使用相同(或相关)的散列算法来快速检查其 ID 是否包含在散列中。如果是,则服务继续。如果不是,它会抛出异常。这种方法显然不能防止故意滥用,但这些都是内部服务,我们只需要阻止疏忽的滥用。

我不确定要使用哪种散列算法(或者“散列”是否是正确的词)。我可以将所有允许的 ID 收集为String,然后检查给定的 ID 是否包含在该字符串中。但是,“上下文”值将是巨大且笨重的。我确信有标准的数学方法可以散列值列表,然后检查给定的原始值是否在该列表中。可能有些已经被整齐地打包并暴露在 Java 世界中。任何建议表示赞赏!

4

4 回答 4

0

我会建议您实施权限并只允许那些具有所需权限的应用程序。

有关详细信息,请阅读有关 android 权限的详细主题:

http://developer.android.com/guide/topics/security/permissions.html

于 2013-01-23T16:43:14.033 回答
0

我认为您正在查看的是将压缩的平面文件/XML 传递给服务。该服务会将文件内容(解压缩后)读入 aHashSet并检查其id是否存在于HashSet.

于 2013-01-23T17:41:14.123 回答
0

您可以使用哈希表。我认为它甚至在标准库中。

于 2013-01-23T17:42:33.647 回答
0

您将收到的这些 ID 的范围是什么?

您应该使用哈希表,但如果这些 ID 在相对较小的范围内(相对于您的系统内存),您可以创建最简单的哈希表。

如果这些 ID 在 n 和 n+m 之内,则创建一个大小为 m 的数组并将每个元素设置为 FALSE。对于要添加的每个 ID,将 array[ID - n] 设置为 TRUE。要检查是否已传入 ID,只需检查 if (array[ID - n])

于 2013-01-23T21:02:49.340 回答