[英]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.