【问题标题】:ktor hocon configuration not working for one password variablektor hocon 配置不适用于一个密码变量
【发布时间】:2021-10-01 00:39:45
【问题描述】:

我正在设置一个与 docker 中的 postgres 容器连接的 ktor api。当我硬编码时,我可以让一切正常工作。当我尝试使用 hocon 配置并打印值时,我可以看到我的 dburl 和 dbuser,但是当我打印我的 dbpassword 时,我得到一个类似值的地址。

这是我的 hocon 配置:

ktor {
    deployment {
        port = 8080
        port = ${?PORT}
    }
    application {
        modules = [ com.personal.ApplicationKt.module ]
    }
    security {
        ssl {
            keystore = ""
        }
    }
}
jwt {
    secret = "redacted"
    issuer = "https://jwt-provider-domain/"
    audience = "jwt-audience"
    realm = "ktor sample app"
}
db {
    jdbcUrl = "jdbc:postgresql://docker-compose-db-name:5432/db_name"
    dbUser = "redacted"
    dbPassword = "redacted_password"
}

这是我的应用程序代码,它试图使用这些值来加载/迁移我的数据库:

    private val appConfig = HoconApplicationConfig(ConfigFactory.load())
    private val dbUrl = appConfig.property("db.jdbcUrl").getString() 
    private val dbUser =  appConfig.property("db.dbUser").getString()
    private val dbPassword = appConfig.property("db.dbPassword").toString()  

    fun init() {
        Database.connect(hikari())
        // auto migration when spinning up db
        println("URL: $dbUrl")
        println("USER: $dbUser")
        println("PASSWORD: $dbPassword")
        val flyway = Flyway.configure().dataSource(dbUrl, dbUser, dbPassword).load()
        flyway.migrate()
    }

    private fun hikari(): HikariDataSource {
        val config = HikariConfig()
        println("URL: $dbUrl")
        println("USER: $dbUser")
        println("PASSWORD: $dbPassword")
        config.driverClassName = "org.postgresql.Driver"
        config.jdbcUrl = dbUrl
        config.username = dbUser
        config.password = dbPassword
        config.maximumPoolSize = 3
        // auto commit sql operations
        config.isAutoCommit = false
        // no dirty reads allowed. Only see data that was committed prior to start of statement
        config.transactionIsolation = "TRANSACTION_READ_COMMITTED"
        config.validate()
        return HikariDataSource(config)
    }

这三个打印行打印出来: “网址:jdbc:postgresql://docker-compose-db-name:5432/db_name” “用户:已编辑” "密码:io.ktor.config.HoconApplicationConfig$HoconApplicationConfigValue@4b9df8a"

然后我因为编辑而获得身份验证失败。当我对这些值进行硬编码时,它会 100% 工作。我的密码是否过于神秘或包含无法在 hoconstring 中使用的值?

【问题讨论】:

    标签: kotlin ktor


    【解决方案1】:

    问题是获取db.dbPassword 值的最后一次调用是toString 而不是getString

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多