【问题标题】:How do I set grails.serverURL in an enterprise environment when I don't know the server name and port ahead of time?不知道服务器名称和端口的情况下,如何在企业环境中设置 grails.serverURL?
【发布时间】:2012-01-19 21:13:21
【问题描述】:

我们在 Grails 2.0 中有一个应用程序,当我们在 localhost:8080 上运行时,它正在运行。在Config.groovy 中,应用程序有一个grails.serverURL 属性,必须为当前主机和当前应用程序名称设置该属性。然而,在我们的 QA 环境中,中间件团队接受了我们提供给他们的战争,并将其部署到我们事先不知道其名称和端口的服务器上。

似乎 Grails 假设您总是要注册一个域名,然后完全控制该名称和应用程序运行的端口,但事实并非如此。

解决此问题的最佳方法是什么?我们尝试简单地删除 grails.serverURL,但 Spring Security 似乎使用它来构建登录成功和注销成功时重定向的 url。

development { grails.serverURL = "http://www.notused.com/${appName}" }
production { grails.serverURL = "<we don't know yet>" }

在有人问之前,我已经阅读了 StackOverflow 和其他地方的许多与此问题相关的帖子,但没有回答这个特定问题。

【问题讨论】:

    标签: grails


    【解决方案1】:

    不,Spring Security 不使用它。删除 serverURL 属性并让 Grails 生成相对于当前正在运行的应用程序的 url 应该始终是安全的。

    通常,您需要此属性的唯一地方是当您生成电子邮件并希望嵌入服务器 url 以便用户可以点击返回您的站点时。由于这些通常是异步发送的,而不是在服务器请求期间发送的,因此没有配置选项就无法知道服务器地址。但是,如果您不这样做,则可以安全地省略。

    【讨论】:

    • 在 Confg.groovy 中的 URL 设置插件值的情况下可以做什么?例如,CAS 插件需要绝对 URL 才能注销
    【解决方案2】:

    Grails 有一个名为Externalized Configuration 的内置机制,它允许您在应用程序外部访问一个或多个可选的Config.groovy 文件。

    您将这样的内容添加到您的Config.groovy:

    grails.config.locations = [
        "classpath:${appName}-config.properties",
        "classpath:${appName}-config.groovy",
        "file:${userHome}/.grails/${appName}-config.properties",
        "file:${userHome}/.grails/${appName}-config.groovy" ]
    

    然后在您的服务器上的任何一个文件中包含此内容:

    grails.serverURL = "http://example.com/"
    

    外部配置将覆盖基本配置。

    【讨论】:

    • 我用 Burt 的回答解决了我的登录问题,但现在我遇到了另一个问题,我需要在 xml 文件中读取某些设置。问题是,我应该把它放在哪里以便它可以与应用程序一起部署?此外,它必须在 dev 中工作,并且当部署到 qa/prod 时,这个 classpath: notation 是如何工作的?我在哪里添加一些东西(文件夹)到类路径?
    • 请提出一个新问题,而不是仅仅添加到这个问题。
    【解决方案3】:

    将 serverURL 外部化为可由中间件团队设置的属性。例如,放置在 config.properties 文件中,并将其作为 Spring 属性配置的一部分。将属性外部化通常是最佳实践,这样您就可以传递 WAR 并对其进行部署和配置,而无需重新编译和重新打包。

    查看这里以获得更好的示例:https://stackoverflow.com/a/973375/463226

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-14
      • 2020-12-19
      • 2013-05-04
      • 1970-01-01
      相关资源
      最近更新 更多