首先,我知道最好的做法是使用一个单一的数据库用户帐户在你的web应用程序,以利用连接池的优势,以保持应用程序很好,反应灵敏。 然而,由于要求(在不改变这个在任何情况下),我必须验证与他或她的数据库帐户每个用户。
上下文是在Android上运行的仓库管理应用程序,但网络服务,我可能会在Grails的写,除非一个建议这里显示我为我要求技术更适合中获取数据。 由于应用程序的性质,用户将可能只需要每天一次或两次验证,所以我想我可以简单地保持在连接中通过与密码连接在一起的用户名的哈希码键控HashMap中。 这应该允许应用程序维持相同或相似的性能水平的最佳实践。
现在,我的问题是在使用持久连接对象。 我知道,我将无法与GORM使用它们无需定制的显著量,所以我打算用他们groovy.sql.Sql,其工作进行的顺利,因为大部分的业务逻辑是在PL / SQL包无论如何。
我的问题是如何在groovy.sql.Sql类处理其Connection对象? 我会碰上联系问题被它关闭,或者我可以安全地使用我的HashMap来坚持的连接?
groovy.sql.Sql不会关闭您的连接。 在类规范,你可以找到:
如果该SQL对象用一个连接创建,则此方法关闭连接。
所以SQL类是真的,如果你想自己做的事情,而不是休眠完全信任。 虽然,我认为你可以使用Spring的UserCredentialsDataSourceAdapter您的解决方案。 它使用ThreadLocal的设置每个线程凭证,以便调用: UserCredentialsDataSourceAdapter.setCredentialsForCurrentThread(String username, String password)
会解决。 还有其他aproaches你可以尝试在这里 。
我其实只是发现了一些未来的这个问题游客可能会发现有用的。 当挖掘到Spring框架的文档时,我发现,他们的JDBC扩展真正实现代理认证(其中一个代理帐户用于建立连接,而是提供了SQL的执行上下文中的实际帐户)。 不幸的是,由于2012年8月17日实施不支持使用密码的用户通过代理连接,所以它不会对我来说是可用的当前,但任何人都发现这个问题应该检查,看看是否仍是如此。 这里是链接:
JDBC扩展文件v1.0.0.RC1
JDBC扩展文档库