当前位置: 首页 > 面试题库 >

在syscontext上传递ClientInfo / ClientIdentifier /与Hibernate进行连接以进行审核

丌官高远
2023-03-14
问题内容

我有一个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。这样,即使您的数据源配置了共享用户名,您也可以捕获用户登录信息。

这是我认为您正在使用的oracle解决方案。还应该有可能使其适应另一个数据库。



 类似资料:
  • 我想在kotlin数据类中使用@CreatedDate注释。所有属性都应初始化为不可变(val)。问题是,实现无法处理不可变变量。不会设置正确的日期,且变量为空。通过可变变量,实现可以设置日期。 示例: kotlin编译器是否有专门的插件来解决这个问题,或者在同一个数据类中使用val和var可以吗?

  • 问题内容: 我们有一个应用的公开测试版,偶尔会导致堆空间溢出。JVM通过休假来做出反应。 为了分析这一点,我想在内存出现故障的时候查看一下。Java不想让我这样做。该进程仍在内存中,但似乎未被视为Java进程。 有问题的服务器是Debian Lenny服务器Java 6u14 问题答案: 解决方案非常简单。我以root用户身份运行jmap,但必须以启动jvm的用户身份运行它。我现在要羞愧地隐藏我的

  • 我有一个带有spring Boot(v2.3.3)和spring数据的spring web应用程序。我的评估表包含以下列: Id 我的用例是表中名称和地址的任何更改评估应该创建一个新行,版本以相同的id递增。 因此,基本上只有当地址或姓名更新时,才能在评估表中插入新记录。下面是一个示例: 现有记录: 例如,名称已更新为Ryan,应该有两行,如下所示: 因此,基本上,任何名称和地址的变化都应在评估表

  • 因此,当我在网上搜索时,我发现一些人有类似的问题,但没有解决办法。有人对这个问题有所了解吗? 也许是天线和Android4.0之间的可压缩性问题。我不认为错误是在我的代码中,因为正如我所说的,相同的代码在旧的android版本上运行得很完美。

  • 问题内容: 我创建了两个视图控制器。我从第一个到第二个创建了一个序列,以传递数据。现在,我想将数据从第二个视图控制器传递给第一个。我经历了许多类似的问题,但由于我缺乏关于放松工作原理的知识,因此无法实现这些问题。 ViewController.swift 这会将数据传递给视图控制器“ viewControllerB”中的dataPassed。 说,现在我想将一些数据从viewControllerB

  • 问题内容: 我将数据传递到刀片视图并在刀片视图中尝试运行,但最终出现错误,提示未定义。 我的问题是如何调用数组? 问题答案: 您可以使用方法将数据传递到视图。