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

时间:2012-01-19 21:13:21

标签: grails

我们在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和其他与此问题相关的大量帖子,但没有回答这个具体问题。

3 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:6)

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/"

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

答案 2 :(得分:4)

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

请参阅此处以获取更好的示例:https://stackoverflow.com/a/973375/463226