我有一个Web服务,可处理向DB中插入/更新的数据。当客户端调用此Web服务时, UserId (当前登录到门户的用户)将在Request中发送。我需要将此userId传递给Db连接,或者在 sys上下文 中将其设置为 Audit目的 。我们已经有现有的审计表和触发器,可以在对实际表进行插入/更新后对审计表进行插入/更新。因此,为了跟踪这些更改,我需要以某种方式将此UserId传递给 连接, 以便可以从Sys Context或$ session从数据库中检索它,并将其插入Audit表中。我目前正在使用Spring和Hibernate事务来处理DB中的数据。
我试图在“连接”上设置客户端信息,但无法正常工作。我在下面尝试过:
Session session=sessionFactory.getCurrentSession(); SessionImpl sImpl=(SessionImpl) session; Connection connection=sImpl.connection(); connection.setClientInfo("ClientUser", "ABC");
而且我每次通过应用程序代码对数据库执行操作之前,都试图通过调用存储过程 DBMS_APPLICATION_INFO.SET_CLIENT_INFO 来设置客户端信息。但是我不敢提一下这是否是正确的处理方法。
我正在使用OCI和瘦JDBC驱动程序进行尝试,但是找不到设置此用户ID的方法。
有人可以让我知道是否有任何有效的方法可以在sys上下文或Connection中传递用户ID。我目前正在使用 hibernate4,Spring,Websphere Server,Oracle DB。
我正在使用Spring @Transactional来处理hibernate连接和事务以对DB执行操作。连接来自连接池,并且我正在将 org.springframework.jndi.JndiObjectFactoryBean 用于 dataSource 。
当我们从连接池中获得连接时,有什么方法可以在连接周围设置拦截器或包装器。
有人做过吗?
在Oracle数据库的Spring数据JDBC扩展中对此进行了描述
章节
8.2自定义数据源连接准备器的配置 …但是您可以实现一个ConnectionPreparer,它将使用当前用户的登录ID。这样,即使您的数据源配置了共享用户名,您也可以捕获用户登录信息。
8.2自定义数据源连接准备器的配置
…但是您可以实现一个ConnectionPreparer,它将使用当前用户的登录ID。这样,即使您的数据源配置了共享用户名,您也可以捕获用户登录信息。
这是我认为您正在使用的oracle解决方案。还应该有可能使其适应另一个数据库。