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