0

これが可能かどうか、または別の方法を見つける必要があるかどうかはわかりませんが...

認証システムとして Spring-Security-Core を使用する Grails アプリケーションがあります。最終的に展開される可能性のある場所がいくつかあり、場所によって異なる認証プロバイダーが使用される場合があります (たとえば、DAO を使用する場所もあれば、LDAP を使用する場所もあります)。

.properties ファイルの 'auth.type=LDAP' または 'auth.type=DAO' の行に基づいてアプリをセットアップできるようにしたいと考えています。アプリが 2 つのうちどちらになるかを認識したら、これに対応するために Config.groovy でさらにプロパティを設定する必要があります。

config.groovy が .properties ファイルからプロパティをロードし、Config.groovy 内でそれらのプロパティを switch ステートメントで使用して、設定する他のプロパティを決定する必要があるという方針に沿って考えていました。ただし、これを試しましたが、構成ファイルでは、構成ファイルのすべてのプロパティの後に .properties ファイルのプロパティが読み込まれると思います。それは正しい仮定ですか?

とにかく、誰かがこの効果を達成する簡単な方法を知っていれば、とても感謝しています

4

1 に答える 1

1

ファイルから読み取られたプロパティ (groovy またはプロパティ) は、メインが読み取らgrails.config.locationsれた後にのみ適用されることは正しいです。Config.groovyカスタム環境を使用して、次のようなものを使用できます

environments {
  ldapAuth {
    foo.bar = 'something'
  }
  daoAuth {
    foo.bar = 'something else'
  }
}

ただし、WAR をビルドするときに環境を指定する必要があります。1 つの WAR をビルドして、実行時に別の環境用に構成することはできません。

WARを実行しているTomcat(または何でも)にシステムプロパティを指定する方法がある場合は、次のようなことができます

def authType = System.getProperty('myapp.auth.type', 'dao')
// store authType as a real config option as well as a local variable
auth.type = authType

switch(authType) {
  case 'dao':
    foo {
      bar = 'something'
    }
    break

  case 'ldap':
    foo {
      bar = 'something else'
    }
    break

  default:
    println "Unrecognised auth type ${authType}"
}

または、ファイルを自分で手動で読み取る.properties(に依存するのではなくgrails.config.locations)

def authProps = new Properties()
new File('/etc/myapp/auth.properties').withInputStream(authProps.&load)
def authType = authProps.getProperty('auth.type', 'dao')
auth.type = authType

// switch(authType) as before

1 つのしわ -log4jクロージャー内で、変数にアクセスできない場合がありauthPropsます (わかりません。試したことはありません)。ただし、そのクロージャー内ではとして完全な構成にアクセスできるconfigため、上記で使用した行があれば、代わりauth.type = authTypeに言うことができますconfig.auth.type

于 2012-10-31T10:48:20.537 に答える