복붙노트

[SPRING] 감사를 위해 Hibernate와의 syscontext / connection에 ClientInfo / ClientIdentifier 전달하기

SPRING

감사를 위해 Hibernate와의 syscontext / connection에 ClientInfo / ClientIdentifier 전달하기

DB에 삽입 / 업데이트 된 데이터를 처리하는 웹 서비스가 있습니다. 클라이언트가이 웹 서비스를 호출하면 UserId (현재 포털에 로그인 한 사용자)가 요청으로 전송됩니다. 이 userId를 Db 연결에 전달하거나 감사 목적으로 sys 컨텍스트에 설정해야합니다. 실제 테이블에 삽입 / 업데이트 한 후에 감사 테이블에 삽입 / 업데이트 할 수있는 기존의 감사 테이블과 트리거가 있습니다. 따라서 이러한 변경 사항을 추적하려면이 UserId를 Sys Context 또는 $ session에서 DB에서 검색하고 Audit 테이블에 삽입 할 수 있도록 연결해야합니다. 현재 DB로 데이터를 처리하기 위해 Spring과 Hibernate 트랜잭션을 사용하고 있습니다.

Connection에서 클라이언트 정보를 설정하려고했지만 작동하지 않습니다. 나는 아래에서 시도했다 :

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

또한 DB에서 작업 할 때마다 DBMS_APPLICATION_INFO.SET_CLIENT_INFO 저장 프로 시저를 호출하여 클라이언트 정보를 설정하려고합니다. 응용 프로그램 코드에서 매번 작업을 수행합니다. 그러나 처리 할 올바른 방법이 있다면 고소하지 않습니다.

나는 OCI와 thin JDBC 드라이버 모두를 사용하려고 시도하고 있지만이 사용자 ID를 설정할 방법을 찾을 수 없다.

누군가가 sys 컨텍스트 또는 Connection에서 사용자 ID를 전달하는 효율적인 방법이 있다면 알려주실 수 있습니까? 저는 현재 hibernate4, Spring, Websphere Server, Oracle DB를 사용하고 있습니다.

Spring @Transactional을 사용하여 최대 절전 모드 연결을 처리하고 DB.Connections의 작업을 수행하는 트랜잭션을 연결 풀에서 가져오고 dataSource에 org.springframework.jndi.JndiObjectFactoryBean을 사용하고 있습니다.

연결 풀에서 연결을 가져올 때 인터셉터 나 래퍼를 사용하여 연결을 설정할 수있는 방법이 있습니까?

누구든지 전에 이것을 했습니까?

해결법

  1. ==============================

    1.이것은 스프링 데이터에 설명되어 있습니다 Oracle Database 용 JDBC 확장

    이것은 스프링 데이터에 설명되어 있습니다 Oracle Database 용 JDBC 확장

    이것은 오라클을위한 솔루션으로, 귀하가 사용하고 있다고 생각합니다. 또한이를 다른 데이터베이스에 적용 할 수 있어야합니다.

  2. from https://stackoverflow.com/questions/36961790/passing-clientinfo-clientidentifier-on-syscontext-connection-with-hibernate-for by cc-by-sa and MIT license