繁体   English   中英

如果我不知道服务器名称和端口,如何在企业环境中设置grails.serverURL?

[英]How do I set grails.serverURL in an enterprise environment when I don't know the server name and port ahead of time?

我们在Grails 2.0中有一个可以在localhost:8080上运行的应用程序。 Config.groovy ,应用程序具有grails.serverURL属性,必须为当前主机和当前应用程序名称设置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和与该问题有关的其他地方的大量文章,但没有回答这个特定问题。

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

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

Grails具有一种称为“ 外部化配置”的内置机制,该机制使您可以在应用程序之外访问一个或多个可选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/"

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

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

参见此处以获得更好的示例: https : //stackoverflow.com/a/973375/463226

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM