2012-01-19 7 views
8

localhost:8080で実行しているGrails 2.0のアプリケーションがあります。 Config.groovyには、アプリケーションにはgrails.serverURLプロパティがあり、現在のホストと現在のアプリケーション名に設定する必要があります。しかし、私たちのQA環境では、ミドルウェアチームは私たちに与えた戦争を取り上げて、わからない名前とポートを持つサーバーに展開します。サーバ名とポートがわからないときにエンタープライズ環境でgrails.serverURLを設定するにはどうすればよいですか?

Grailsは、あなたが常にドメイン名を登録し、その名前とアプリケーションが実行しているポートを完全に制御すると仮定しているようです。

この問題を解決する最善の方法は何ですか? grails.serverURLを単に削除しようとしましたが、Spring Securityはログインの成功とログアウトの成功に向けてリダイレクトするためのURLを構築するために使用しているようです。

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

そして、誰もが尋ねる前に、私はこの問題に関連して他の場所のStackOverflowとの数多くの記事を読みましたが、この特定の質問に答えていません。

答えて

9

いいえ、春のセキュリティはそれを使用しません。 serverURLプロパティを削除し、Grailsに現在の実行中のアプリケーションからの相対的なURLを生成させるのは、常に安全でなければなりません。

通常、このプロパティが必要なのは、電子メールを生成しているときにユーザーがサイトに戻るようにサーバーのURLを埋め込みたい場合です。これらはしばしば非同期で送信され、サーバ要求中ではないので、configオプションなしでサーバアドレスを知る方法はありません。しかし、それをやっていないなら、省略することは安全です。

+1

プラグインの値を設定するために、Confg.groovyのURLの場合は何ができますか?例えば、CASプラグインにはログアウトのための絶対URLが必要です –

4

serverURLをMiddlewareチームが設定できるプロパティに外部化します。たとえば、config.propertiesファイルに置いて、それをSpring用のプロパティー設定の一部として使用します。 WARを渡して再コンパイルと再パッケージを必要とせずに展開して構成できるように、プロパティを外部化することが一般的にはベストプラクティスです。

は、より良い例は、ここを参照してください:https://stackoverflow.com/a/973375/463226

6

GrailsにはExternalized Configurationと呼ばれる組み込みのメカニズムがあり、アプリケーションの外部にある1つ以上のオプションの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/" 

外部設定は、基本設定を上書きします。

+0

私はBurtの答えでログインの問題を解決しましたが、いくつかの設定でxmlファイルを読む必要がある別の問題があります。問題は、アプリケーションと一緒にデプロイできるように、どこに置くのですか?また、devで動作しなければならず、qa/prodにデプロイされた場合、このクラスパス:表記法はどのように機能しますか?クラスパスに何か(フォルダ)を追加するのはどこですか? –

+1

この質問に追加するのではなく、新しい質問をしてください。 – OverZealous

関連する問題