Jakarta ee 如何将用户映射到不同的数据源
我在单个应用程序服务器(Jakarta ee 如何将用户映射到不同的数据源,jakarta-ee,jdbc,jboss,jndi,Jakarta Ee,Jdbc,Jboss,Jndi,我在单个应用程序服务器(jboss4.2.3)中有两个数据源的JNDI设置 如何识别哪个用户请求命中来自哪个数据库连接?如何根据用户请求设置Db连接。我需要一次数据库连接的用户。 i、 我想在我的应用程序中使用动态数据源。我使用纯JDBC连接您正在构建一个多租户应用程序 所以您需要用户和数据源之间的另一个映射(例如在DB表中)。根据该映射选择数据源 用户应该根据您的应用程序进行身份验证,这样您就可以调用request.getRemoteUser()。使用该选项可在映射表中查找数据源名称
jboss4.2.3
)中有两个数据源的JNDI设置
如何识别哪个用户请求命中来自哪个数据库连接?如何根据用户请求设置Db连接。我需要一次数据库连接的用户。
i、 我想在我的应用程序中使用动态数据源。我使用纯JDBC连接您正在构建一个多租户应用程序
- 所以您需要用户和数据源之间的另一个映射(例如在DB表中)。根据该映射选择数据源
- 用户应该根据您的应用程序进行身份验证,这样您就可以调用
。使用该选项可在映射表中查找数据源名称request.getRemoteUser()
- 现在您有了数据源的名称。数据源绑定在JNDI中,每个数据源都有一个唯一的名称
final DataSource ds = (DataSource) ic.lookup("java:/jdbc/x1");
final Connection conn = ds.getConnection();
try {
// Do something with connection
} finally {
conn.close();
}
因此,在您的例子中,有两个名称,如java:/jdbc/x1
和java:/jdbc/x2
您可以在定义数据源的同一位置定义JNDI名称。请澄清,这里有两个或三个问题(将其简化为一个问题)。顺便问一下,哪个数据库?我有一个应用服务器(JBoss),在其中,我定义了两个数据源(都指向oracle DB),我的问题是,我们如何识别(应用服务器指向哪个DB应该使用)感谢铍,我想知道,在用户请求中是否有任何技术可以传递数据源名称(Java:/jdbc/x1或Java:/jdbc/x2)?是,示例中已经有:只需将字符串参数从请求传递到
lookup()
方法。技术上可能,但请检查您没有打开任何安全漏洞。以我的场景为例,用户A使用x1数据源,用户B使用x2数据源,每当用户A登录应用程序时,我的应用程序中需要x1数据源名称,我们不知道哪个用户一次可以访问应用程序..要么将用户名作为请求参数传递(再次:检查安全漏洞),要么让用户先进行身份验证;在这种情况下,您可以调用request.getRemoteUser()
。实际上,我的数据库中有数千个用户。A公司的一些,B公司的一些,我的应用程序对两个客户都是一样的,但DB是不同的。所以我们只想使用DataSource techniq来处理一个应用服务器和两个DB DataSource。如果你有其他方法,请分享。