【问题标题】:How to force my EAR files to just be deployed on an specific server?如何强制我的 EAR 文件仅部署在特定服务器上?
【发布时间】:2013-12-15 12:56:44
【问题描述】:

我正在为使用 J2EE 技术(JSF、EJB、Hibernate 等)的客户开发企业 Java 应用程序。为了避免客户复制我的 .ear 文件并将它们部署在另一台服务器上(AppServer 是 Weblogic),我正在寻找一种标准且安全的方法来将我的项目输出文件绑定到特定的物理服务器。这意味着我需要在构建时将我的项目输出绑定到物理服务器,然后只允许客户在特定服务器上进行部署。

是否有任何标准方法/库可以执行此操作,或者我应该使用服务器标识符在我的代码中手动执行此操作?

【问题讨论】:

    标签: java jakarta-ee deployment weblogic ear


    【解决方案1】:

    我认为您无法 100% 确保客户无法将您的应用程序复制、调整和运行到另一台服务器上。首先,ear 文件只是一个 ZIP 文件,其中的类也很容易反编译和再次编译,即使 EAR 会被签名。所以有很多空间可以做一些有趣的事情:)

    如果您只是希望保护客户免于“意外”将您的 EAR 部署在第二台服务器上,那么第一步、简单且便宜的步骤可能是在此阶段链接/插入预测的主机名(甚至可能是 IP 地址)阶段到清单甚至 java 文件(使事情更加静态)。然后围绕您想要保护的所有方法添加一个已初始化、稍后缓存的拦截器,并根据您的预配置和链接主机信息检查本地系统(即使用 InetAddress.getLocalHost())。尽管如此,还是很弱:/

    【讨论】:

    • 确切的原因是我的开发人员有时会从他们笔记本电脑上的源更新客户版本。我想强迫他们从构建服务器获取版本并将其提交给客户。这让我确信我的源代码管理中拥有每个版本的源代码。
    • 你给了我一个微笑,因为这是一个闻所未闻的问题 ;-) 如果它是一个 maven 项目并且 EAR 是一个模块,为什么不向失败的 ear 模块添加一个单元测试,如果测试未在构建服务器上运行。您甚至可能想尝试“覆盖”系统属性以跳过此特定模块 pom 中的测试,或者编写自己的 maven 插件来处理整个故事。老实说,我认为我们应该尝试改变开发人员的心态,而不是他们使用的技术;-)
    • 你是对的。开发者的想法应该改变。此外,我需要确保客户不会将项目复制到新服务器中。顺便说一句,单元测试是一个好主意,我应该继续努力。
    【解决方案2】:

    如果它是一个 MAVEN 项目,您可以在编译服务器的 de settings.xml 中添加一些内容,以允许在生产系统的配置上运行不同的东西。类似于数据源的不同名称或类似名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-12
      • 1970-01-01
      • 1970-01-01
      • 2012-04-02
      • 1970-01-01
      • 2023-03-27
      相关资源
      最近更新 更多