2013-12-13 8 views
2

Внутри Config.groovy я имею установку несколько переменных окружения:Как использовать переменные среды внутри Config.groovy

def appName = grails.util.Metadata.current.getApplicationName() 
def casUrl = "https://login.cas.server/cas" 
environments { 
    development { 
     grails.logging.jul.usebridge = true 
     host.address = "12.34.56.78" 
     host.port = "8080" 
    } 
    test { 
     grails.logging.jul.usebridge = true 
     host.address = "http://staging.server.somewhere.com/" 
     host.port = "" 
    } 
    production { 
     grails.logging.jul.usebridge = false 
     host.address = "http://www.production.com" 
     host.port = "" 
    } 
} 

Я пытаюсь использовать эти значения в том же файле конфигурации (Config. заводной) как так:

grails.plugin.springsecurity.cas.loginUri = '/login' 
grails.plugin.springsecurity.cas.serviceUrl = "${host.address}:${host.port}/${appName}/j_spring_cas_security_check" 
grails.plugin.springsecurity.cas.serverUrlPrefix = '${casUrl}' 
grails.plugin.springsecurity.cas.proxyCallbackUrl = "/secure/receptor" 
grails.plugin.springsecurity.logout.afterLogoutUrl = "${casUrl}/logout?url=${host.address}:${host.port}/${appName}/" 

Однако, единственное, что становится решена переменная APPNAME, все остальное является недействительным. Это что-то, что можно сделать? Похоже, он использовался в этом сообщении здесь Grails: Spring Security CAS Working in 2.2.3, но я не могу заставить их решить.

Если я что-то вроде

def appName = grails.util.Metadata.current.getApplicationName() 
def casUrl = "https://login.umt.edu/cas" 
host.address = "MyAddress" 
environments { 
... 

ConfigSlurper решает, что host.address внутри конфигурации CAS, почему я не могу получить доступ к переменным enviornment?

+0

Сколько хранится 'environment' в файле' config.groovy'. Это должно быть только одно. – Alidad

ответ

0

См. Ответ here под Основная конфигурация.

Однако вы не можете вставить после использования точечной нотации. Другими словами, это не будет работать

// Won't work! 
foo.bar { 
    hello = "world" 
    good = "bye" 
} 

Так что попробуйте использовать вложенности как этот

foo { 
    bar { 
    hello = "world" 
    good = "bye" 
    } 
} 
+0

делая это таким образом, переменные все еще не решаются. В моем URL-адресе «% 5B% 3A% 5D% 3A% 5B% 3A% 5D% 2Fmyapplication% 2Fj_spring_cas_security_check' – idonaldson

0

Перемещение свойства, которые зависят от host.address и host.port внутри каждого блока окружающей среды:

environments { 
    development { 
     grails.logging.jul.usebridge = true 
     host.address = "12.34.56.78" 
     host.port = "8080" 
     grails.plugin.springsecurity.cas.serviceUrl = "${host.address}:${host.port}/${appName}/j_spring_cas_security_check" 
     grails.plugin.springsecurity.logout.afterLogoutUrl = "${casUrl}/logout?url=${host.address}:${host.port}/${appName}/" 
    } 
    test { 
     grails.logging.jul.usebridge = true 
     host.address = "http://staging.server.somewhere.com/" 
     host.port = "" 
     grails.plugin.springsecurity.cas.serviceUrl = "${host.address}:${host.port}/${appName}/j_spring_cas_security_check" 
     grails.plugin.springsecurity.logout.afterLogoutUrl = "${casUrl}/logout?url=${host.address}:${host.port}/${appName}/" 
    } 
    production { 
     grails.logging.jul.usebridge = false 
     host.address = "http://www.production.com" 
     host.port = "" 
     grails.plugin.springsecurity.cas.serviceUrl = "${host.address}:${host.port}/${appName}/j_spring_cas_security_check" 
     grails.plugin.springsecurity.logout.afterLogoutUrl = "${casUrl}/logout?url=${host.address}:${host.port}/${appName}/" 
    } 
} 

Вы можете избавиться от host.address и host.port переменных в целом:

environments { 
    development { 
     grails.logging.jul.usebridge = true 
     grails.plugin.springsecurity.cas.serviceUrl = "http://12.34.56.78:8080/${appName}/j_spring_cas_security_check" 
     grails.plugin.springsecurity.logout.afterLogoutUrl = "${casUrl}/logout?url=http://12.34.56.78:8080/${appName}/" 
    } 
    test { 
     grails.logging.jul.usebridge = true 
     grails.plugin.springsecurity.cas.serviceUrl = "http://staging.server.somewhere.com/${appName}/j_spring_cas_security_check" 
     grails.plugin.springsecurity.logout.afterLogoutUrl = "${casUrl}/logout?url=http://staging.server.somewhere.com/${appName}/" 
    } 
    production { 
     grails.logging.jul.usebridge = false 
     grails.plugin.springsecurity.cas.serviceUrl = "http://www.production.com/${appName}/j_spring_cas_security_check" 
     grails.plugin.springsecurity.logout.afterLogoutUrl = "${casUrl}/logout?url=http://www.production.com/${appName}/" 
    } 
} 
Смежные вопросы