scala - 使用默认工具在 Scala/Play 中连接自定义用户名

标签 scala playframework-2.0

在我的 Scala/Play 应用程序中,我必须使用数据库,但没有默认用户和密码,因为每个经过身份验证的应用程序用户都绑定(bind)到不同的数据库用户。所以我想在获取连接时指定用户名和密码,例如:

DB.withConnection(user = "James", password = "secret") { ... }

目前我在文档中找不到这样的功能(老实说我不确定如何为我的问题指定搜索查询)。

还有一个问题:考虑到 session 存储在用户端,在 session 中存储用户密码是否安全?或者当不同的数据库用户使用应用程序时,是否有针对这种情况的最佳实践?

最佳答案

问题 1 的答案

在 Play 中,您可以按名称获取数据源:

def getDataSource(name: String): DataSource

您必须对play.api.db包中的内容进行大量修改才能获得您需要的功能。

或者,如果您的应用程序的用户数量很少,您可以预定义一堆数据源,并通过他们的登录名检索连接,例如:

db.bob.url="jdbc:h2:mem:db_for_bob"
db.bob.driver=org.h2.Driver

db.alice.url="jdbc:h2:mem:db_for_alice"
db.alice.driver=org.h2.Driver

还有

DB.withConnection("bob") { implicit connection =>

或者

DB.withConnection(userNameKnownAtRuntime) { implicit connection =>

问题 2 的回答

尽管 session 中的数据使用应用程序 key 进行了高度加密,但我建议不要存储这些客户端。相反,根据 this section in the OAuth 2 spec 实现类似于资源所有者密码凭据授予的内容。 。这将为您的客户端提供一个 token ,该 token 仅在设定的时间内有效,并且如果需要,可以在服务器端失效。

关于scala - 使用默认工具在 Scala/Play 中连接自定义用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11072393/

相关文章:

scala 3 内联失败一个非常简单的例子

scala - 如何在 Scala 中声明一个返回自身的函数(或另一个具有相同签名的函数)?

javascript - Scala 中的粘 cookies

scala - "case id ~ username => _"在anorm中如何理解?

json - 如何在 Play 2.x 中强制执行 JSON 的严格序列化

playframework - Play Framework : Page cannot be resolved

scala - 如何在 sbt 中排除 META-INF/*.RSA', 'META-INF/*.SF' ,'META-INF/*.DSA'

scala - 为什么 sbt 说 "bad symbolic reference..."进行 ScalaTest 测试?

java - 强制 java jar 在 EMR 上不使用类路径包

scala - 为什么使用 "run"抛出 NoClassDefFoundError 但使用 "dist"可以正常工作?