Scala 从控制台使用play.api.libs.Crypto

Scala 从控制台使用play.api.libs.Crypto,scala,playframework,playframework-2.4,Scala,Playframework,Playframework 2.4,我已经在application.conf中设置了变量,但我不确定如何生成全局状态,以便Crypto拾取变量 不正确: scala> play.api.libs.Crypto.encryptAES("test") com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'play.crypto.secret' 但这并没有将其加载到全局配置对象中。一种蛮力方式是从控制台内启动应用程

我已经在
application.conf
中设置了变量,但我不确定如何生成全局状态,以便
Crypto
拾取变量

不正确:

scala> play.api.libs.Crypto.encryptAES("test")
com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'play.crypto.secret'

但这并没有将其加载到全局配置对象中。

一种蛮力方式是从控制台内启动应用程序,这取决于您是否自定义
ApplicationLoader
。在我的例子中,我是这样做的(这样我就可以将macwire用于DI)。这是我的工作原理,我在
build.sbt
中有这个:

val application = new play.api.test.FakeApplication(additionalConfiguration = Map("play.application.secret" -> "foobar"))
和自定义应用程序加载器:

initialCommands in console := """
  import play.api.{ApplicationLoader, Environment, Mode}
  import com.projectname.apiserver.global.MacwireApplicationLoader
  import com.projectname.apiserver.model._
  val env = Environment(new java.io.File("."), this.getClass.getClassLoader, Mode.Dev)
  val context = ApplicationLoader.createContext(env)
  val loader = new MacwireApplicationLoader
  val registry = loader.loadRegistry(context)
  import registry._
"""
然后,当我进入控制台时,我可以执行以下操作:

/**
 * MacwireApplicationLoader replaces the default Play application loader with a
 * compile time DI system (using macwire).
 *
 * More info: https://www.playframework.com/documentation/2.5.x/ScalaCompileTimeDependencyInjection
 */
class MacwireApplicationLoader extends ApplicationLoader {
  def load(context: Context) = loadRegistry(context).application

  def loadRegistry(context: Context): BuiltInComponentsFromContext with Registry =
    new BuiltInComponentsFromContext(context)
      with AppComponents
      with ApplyEvolutions
}

trait AppComponents
    extends BuiltInComponents
    with NingWSComponents
    with Registry {

  lazy val assets: Assets = wire[Assets]
  lazy val config = configuration
  lazy val app = application
  lazy val ws = wsClient

  lazy val router: Router = {
    lazy val prefix = "/"
    wire[Routes]
  }

}

trait ApplyEvolutions extends EvolutionsComponents {
  applicationEvolutions
  override def dynamicEvolutions = new DynamicEvolutions
}

强力方式是从控制台内启动应用程序,这取决于是否自定义
ApplicationLoader
。在我的例子中,我是这样做的(这样我就可以将macwire用于DI)。这是我的工作原理,我在
build.sbt
中有这个:

val application = new play.api.test.FakeApplication(additionalConfiguration = Map("play.application.secret" -> "foobar"))
和自定义应用程序加载器:

initialCommands in console := """
  import play.api.{ApplicationLoader, Environment, Mode}
  import com.projectname.apiserver.global.MacwireApplicationLoader
  import com.projectname.apiserver.model._
  val env = Environment(new java.io.File("."), this.getClass.getClassLoader, Mode.Dev)
  val context = ApplicationLoader.createContext(env)
  val loader = new MacwireApplicationLoader
  val registry = loader.loadRegistry(context)
  import registry._
"""
然后,当我进入控制台时,我可以执行以下操作:

/**
 * MacwireApplicationLoader replaces the default Play application loader with a
 * compile time DI system (using macwire).
 *
 * More info: https://www.playframework.com/documentation/2.5.x/ScalaCompileTimeDependencyInjection
 */
class MacwireApplicationLoader extends ApplicationLoader {
  def load(context: Context) = loadRegistry(context).application

  def loadRegistry(context: Context): BuiltInComponentsFromContext with Registry =
    new BuiltInComponentsFromContext(context)
      with AppComponents
      with ApplyEvolutions
}

trait AppComponents
    extends BuiltInComponents
    with NingWSComponents
    with Registry {

  lazy val assets: Assets = wire[Assets]
  lazy val config = configuration
  lazy val app = application
  lazy val ws = wsClient

  lazy val router: Router = {
    lazy val prefix = "/"
    wire[Routes]
  }

}

trait ApplyEvolutions extends EvolutionsComponents {
  applicationEvolutions
  override def dynamicEvolutions = new DynamicEvolutions
}

在Crypto配置中使用Crypto和pass的构造函数如何?@rethab它在库中以这种方式使用。不确定我是否明白你的意思。在标题中,我读到“从控制台”@rethab,我正在从控制台使用所述库。使用Crypto的构造函数并传入Crypto配置如何?@rethab,它在库中以这种方式使用。不确定我是否理解你的意思。在标题中,我读到了'fromtheconsole'@rethab,我正在从控制台使用上述库。