安全地将包导出到Java模块

时间:2018-02-12 15:17:15

标签: java java-9 java-module

我正在回答this问题,我建议使用exports to语法来阻止外部消费者访问模块之间内部使用的代码。

但是在进一步思考时,模块实现的唯一真正的安全检查是它与名称匹配。考虑这个我正在实现两个模块的例子:

module a {
    exports unsafe to b
}

module b {
    requires a
}

unsafe包含暴露不安全的代码。有没有办法安全将其导出到内部模块而不将其暴露在外部?

在上面的例子中,一个流氓实体可以简单地命名他们的模块b并获得对代码的访问权限(不安全)。 JLS似乎并没有拼出任何可以阻止它的内容。

1 个答案:

答案 0 :(得分:5)

模块的散列为pointed by Alan,适用于您的情况。虽然我个人喜欢JMOD tool中直接回答您问题的说明和示例:

  

使用--hash-modules选项或jmod哈希命令,您可以在   每个模块的描述符,记录模块内容的哈希值   允许依赖它,因此 "将 捆绑在一起   模块。

     

这使您可以允许将包导出到一个或   更具体命名的模块,没有其他人通过合格   出口。运行时验证模块的记录散列是否匹配   在运行时解决的那个;如果没有,运行时将返回错误。