Playframework 如何将application.conf中的ConfigValue与控制器中的字符串参数进行比较?

Playframework 如何将application.conf中的ConfigValue与控制器中的字符串参数进行比较?,playframework,playframework-2.1,Playframework,Playframework 2.1,我正在努力使用Play.current.configuration返回的值在控制器中进行简单的字符串比较。通过字符串比较,application.conf文件节点中的值I.get似乎永远都无法实现。就好像它不是一根弦。下面是application.conf参数 admin.users=[ { "userName" : "admin", "password" : "secret" }, { "userName" : "rkuhar", "password" : "alsosecret" }

我正在努力使用Play.current.configuration返回的值在控制器中进行简单的字符串比较。通过字符串比较,application.conf文件节点中的值I.get似乎永远都无法实现。就好像它不是一根弦。下面是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
    }
  }
}
请注意,传入的用户名值是如何以admin的身份登录的,但adminUserName的“admin”周围有引号

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


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

问题的根本原因是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
      }
    }
  }
def已验证(用户名:字符串,凭据:字符串):布尔={
Play.current.configuration.getObjectList(“admin.users”)匹配{
案例部分(adminUsers)=>{
用于(管理员用户){
log.warn(“application.conf没有生成管理员用户”)
错误的
}
}
}

Play 2.1的这一方面似乎仍然是用Java实现的,因为它没有ScalaDocs。从中引用的Typesafe文档在这里:

使用adminUser.getString而不是adminUser.get不会解决您的问题吗?
  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
      }
    }
  }