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

时间:2012-06-17 15:17:28

标签: scala playframework-2.0

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

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

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

另一个问题:考虑到会话存储在用户端,在会话中存储用户密码是否安全?或者,当不同的数据库用户使用app时,是否有针对此类案例的最佳做法?

1 个答案:

答案 0 :(得分:2)

回答问题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

即使会话中的数据使用应用程序密钥进行了大量加密,我也建议不要存储这些客户端。相反,根据this section in the OAuth 2 spec实施与资源所有者密码凭据授权相似的内容。这将为您的客户端提供一个仅在一段时间内有效的令牌,如果需要,可以在服务器端失效。