2012-10-31 3 views
0

나는이 가능한 경우 확실하지 않습니다 또는 내가거야 만약 내가 Grails 애플리케이션이 다른 주위의 방법하지만 ...Grails는

을 찾을 수있다 이는 Spring Security-Core를 인증 시스템으로 사용합니다. 궁극적으로 배포 될 수있는 위치가 있으며 위치에 따라 서로 다른 인증 공급자를 사용할 수 있습니다 (일부는 DAO를 사용하고 일부는 LDAP 등을 사용합니다)

다음을 기반으로 응용 프로그램을 설정할 수 있기를 원합니다. .properties 파일 'auth.type = LDAP'또는 'auth.type = DAO'의 행. 앱이 그 중 어느 것이 될 것인지를 안다면 Config.groovy를 사용하여 추가 속성을 설정해야합니다.

config.groovy가 .properties 파일에서 속성을로드하고 Config.groovy 내에서 switch 문에서 해당 속성을 사용하여 설정할 다른 속성을 결정해야한다고 생각했습니다. 그러나 나는 이것을 시도했지만 구성 파일에서 .properties 파일의 등록 정보가 구성 파일의 모든 등록 정보 뒤에로드된다고 생각합니다. 그게 올바른 가정입니까? 사람이 영향을 달성하는 간단한 방법을 알고 어쨌든 경우

는 읽은

답변

1

당신은 속성 grails.config.locations (그루비 또는 속성) 파일에서 읽어 올은 주요 Config.groovy 후 적용됩니다 매우 감사하게 될 것입니다. 사용자 정의 환경을 사용하고

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

같은 물건을 가지고 있지만 당신은 전쟁을 구축 하나 WAR를 구축하고 런타임에 다른 환경에 맞게 구성 할 수 없습니다 때 환경을 지정해야 할 수 있습니다.

당신은 당신이 .properties 파일을 직접 읽기 (보다는에 의존하는 수동

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

처럼 뭔가를 할 또는 수있는 당신의 WAR를 실행하는 바람둥이 (또는 무엇이든)에 시스템 속성을 지정할 수있는 방법이있는 경우 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 

한 주름 - log4j 폐쇄 이내에, 나는) 그것을 시도하지 않은 (나도 몰라 당신이 authProps 변수에 액세스 할 수 없습니다 찾을 수 있습니다. 하지만 그 안에는 수 있습니다auth.type = authType 라인을 가지고 제공된 경우 대신에 config으로 전체 구성에 액세스 할 수 있습니다.