【问题标题】:How do you use environment variables inside of Config.groovy如何在 Config.groovy 中使用环境变量
【发布时间】:2014-01-01 10:53:31
【问题描述】:

在 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.groovy) 中使用这些值,如下所示:

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 解析了 CAS 配置中的 host.address,为什么我无法访问环境变量?

【问题讨论】:

  • config.groovy 文件中存在多少个environments 闭包。应该只有一个。

标签: grails groovy


【解决方案1】:

基本配置下查看答案here

但是,使用点表示法后不能嵌套。换句话说,这是行不通的

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

所以尝试像这样使用嵌套

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

【讨论】:

  • 这样做,变量仍然没有得到解决。在我的网址中是%5B%3A%5D%3A%5B%3A%5D%2Fmyapplication%2Fj_spring_cas_security_check
【解决方案2】:

在每个环境块内移动依赖于 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}/"
    }
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 2021-11-17
    • 2016-04-11
    • 2014-12-01
    • 1970-01-01
    相关资源
    最近更新 更多