2016-05-01 16 views
0

Ich habe einen Webservice, der Einfügungen/aktualisierte Daten in DB verarbeitet. Wenn der Client diesen Webservice aufruft, wird UserId (derzeit angemeldeter Benutzer im Portal) in Request gesendet. Ich muss diese userId an Db-Verbindung übergeben oder es in sys Kontext für Audit Zweck setzen. Wir verfügen über Audit-Tabellen und Trigger, um die Audit-Tabelle nach dem Einfügen/Aktualisieren der aktuellen Tabelle einzufügen oder zu aktualisieren. Um diese Änderungen zu verfolgen, muss ich diese UserId irgendwie an Verbindung übergeben, damit sie aus Sys Context oder $ session aus der Datenbank abgerufen und in die Audit-Tabelle eingefügt werden kann. Ich verwende derzeit Spring- und Hibernate-Transaktionen, um Daten mit DB zu verarbeiten.Übergabe von ClientInfo/ClientIdentifier an syscontext/Verbindung mit Hibernate für Überwachungszwecke

Ich habe versucht, Client-Informationen auf Verbindung zu setzen, aber es funktioniert nicht. Ich habe versucht, unten:

Session session=sessionFactory.getCurrentSession(); 
SessionImpl sImpl=(SessionImpl) session; 
Connection connection=sImpl.connection(); 
connection.setClientInfo("ClientUser", "ABC"); 

Und auch DBMS_APPLICATION_INFO.SET_CLIENT_INFO durch den Aufruf der gespeicherten Prozedur Ich versuche Client Info zu setzen, bevor jedes Mal von Anwendungsbetrieb auf DB Durchführung code.but ich verklagen bin nicht, ob es ein richtiger Weg, damit umgehen.

Ich versuche es mit OCI und Thin JDBC-Treibern, aber nicht in der Lage, eine Möglichkeit zum Festlegen dieser Benutzer-ID zu finden.

Kann mir jemand sagen, ob es eine effiziente Möglichkeit gibt, die Benutzer-ID im sys-Kontext oder mit Connection zu übergeben. Ich verwende derzeit Hibernate4, Spring, Websphere Server, Oracle DB.

Ich bin mit Frühling @Transactional Hibernate Verbindungen und Transaktionen verarbeiten Operation auszuführen auf DB.Connections von Verbindungspool ist, und ich bin mit org.springframework.jndi.JndiObjectFactoryBean für Datasource.

gibt es eine Möglichkeit, Interceptor oder Wrapper um Verbindung zu haben, um es zu setzen, wenn wir die Verbindung vom Verbindungspool bekommen.

Hat jemand das schon mal gemacht?

Antwort

1

Dies ist in spring data JDBC Extensions for the Oracle Database

Kapitel

8,2 Konfiguration eines benutzerdefinierten Datasource Verbindung Preparer

... aber man konnte eine ConnectionPreparer implementieren, die die aktuellen Benutzer-Login-ID verwenden würden. Auf diese Weise können Sie Benutzeranmeldeinformationen erfassen, selbst wenn Ihre Datenquelle mit einem gemeinsamen Benutzernamen konfiguriert ist.

Dies ist eine Lösung für Oracle, die ich denke, dass Sie verwenden. Es sollte auch möglich sein, dies an eine andere Datenbank anzupassen.