1

我正在努力使用 Play.current.configuration 返回的值在我的控制器中进行简单的字符串比较。我从 application.conf 文件节点获取的值似乎从未通过我的字符串比较。就好像它不是一个字符串。这是 application.conf 参数。

admin.users=[
  { "userName" : "admin", "password" : "secret" },
  { "userName" : "rkuhar", "password" : "alsosecret" }
]

这是控制器方法

def isAuthenticated(userName: String, credentials: String): Boolean = {
  Play.current.configuration.getObjectList("admin.users") match {
    case Some(adminUsers) => {
      log.debug("admin.users: %s".format(adminUsers))
      for (adminUser <- adminUsers) {
        val adminUserName: String = adminUser.get("userName").render()
        log.trace("userName: %s, adminUserName: %s".format(userName,adminUserName))
        if (adminUserName == userName) {
          log.trace("USER MATCH")
        } else {
          log.trace("skip user")
        }
      }
      "admin123".equals(credentials)
    }
    case None => {
      log.warn("application.conf produced no admin.users")
      false
    }
  }
}

为什么我的简单字符串比较找不到匹配项?就好像 ConfigValue.render() 实际上没有返回一个字符串?当为 isAuthenticated 提供用户名“admin”时,我的日志记录显示了这一点。

2013-06-06T13:07:54.480 [trace] c.a.Sessions$ DSN: APV: RID: - userName: admin, adminUserName: "admin"

请注意传入的 userName 值是如何以 admin 身份记录的,但 adminUserName 周围有引号“admin”。

如何让 Play 框架为我提供 JSON 字段的实际字符串值,而不是 JSON 字段的字符串值的字符串值?

Play 2.1 的学习曲线感觉越来越陡峭。

4

1 回答 1

0

问题的根本原因是 render() 调用。unwrapped() 方法是我想要完成的更好的选择;从 JSON 中的特定字段中提取值。当然有更好的方法来做这件事,但我是新手,这是我想出的最好的:

  def isAuthenticated(userName: String, credentials: String): Boolean = {
    Play.current.configuration.getObjectList("admin.users") match {
      case Some(adminUsers) => {
        for (adminUser <- adminUsers) {
          val adminUserName = adminUser.get("userName").unwrapped()
          if (userName == adminUserName) {
              val adminUserCredentials = adminUser.get("credentials").unwrapped()
              log.trace("adminUserCredentials: " + adminUserCredentials)
              if ( credentials == adminUserCredentials) {
                return true
              }
          }
        }
        false
      }
      case None => {
        log.warn("application.conf produced no admin.users")
        false
      }
    }
  }

看来 Play 2.1 的这一方面仍然在 Java 中实现,但没有 ScalaDocs。从这里引用的 Typesafe 东西的文档在这里: http ://typesafehub.github.io/config/latest/api/

于 2013-06-11T02:45:31.263 回答