我正在开发一组服务和一个客户端 JAR 文件,该文件旨在成为调用这些服务的唯一方式。客户端 JAR 将被多个应用程序使用(都是内部的)。但是,我们希望某些服务可以用于某些客户端应用程序,而不能用于其他应用程序。
我正在尝试不同的方法来实现这个目标,但一种方法是给每个应用程序一个“上下文”值以在运行时传递。此值将表示允许该客户端应用程序的服务列表,并且服务将能够快速计算它是否在该列表中。
每个服务都有自己的 ID 值,可能作为static final
变量硬编码到 Java 类中。对于每个客户端应用程序,我会汇总一个允许的服务列表,可能使用 Groovy 脚本或非常基本的 Web 应用程序。一些基于反射的代码将收集所有这些 ID 值,并生成一个代表它们的哈希值。
我会将这个“上下文”哈希与客户端 JAR 一起提供给客户端应用程序所有者,他们会在调用服务时在运行时将其传回。该服务将使用相同(或相关)的散列算法来快速检查其 ID 是否包含在散列中。如果是,则服务继续。如果不是,它会抛出异常。这种方法显然不能防止故意滥用,但这些都是内部服务,我们只需要阻止疏忽的滥用。
我不确定要使用哪种散列算法(或者“散列”是否是正确的词)。我可以将所有允许的 ID 收集为String
,然后检查给定的 ID 是否包含在该字符串中。但是,“上下文”值将是巨大且笨重的。我确信有标准的数学方法可以散列值列表,然后检查给定的原始值是否在该列表中。可能有些已经被整齐地打包并暴露在 Java 世界中。任何建议表示赞赏!