복붙노트

[SPRING] Spring 3.0 / AOP / Aspectj : autoproxy가 getConnection ()에 대한 모든 호출을 가로 채기

SPRING

Spring 3.0 / AOP / Aspectj : autoproxy가 getConnection ()에 대한 모든 호출을 가로 채기

DBMS 식별자를 설정하기 위해 getConnection () 메서드에 대한 호출을 가로 채려고합니다. 그것을 얻기위한면을 구현했지만 아무 것도 얻지 못합니다. 어떤 생각? 감사!

import java.sql.CallableStatement;
import java.sql.Connection;

import javax.servlet.http.HttpSession;

import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;

import es.iberia.tryp.model.entities.Usuario;

@Component
@Aspect
public class ConnectionAspect {

    @AfterReturning(value = "execution(java.sql.Connection javax.sql.DataSource+.getConnection(..))", returning = "connection")
    //@AfterReturning(value = "execution(java.sql.Connection org.springframework.jdbc.datasource.*.*(*))", returning = "connection")
    //@AfterReturning(value = "execution(java.sql.Connection java.sql.Connection *(..))", returning = "connection")
    //@AfterReturning(value = "execution(java.sql.Connection org.springframework.jdbc.datasource.DriverManagerDataSource.*(..))", returning = "connection")

    public void prepare (Connection connection) throws Throwable {

        HttpSession httpSession = (HttpSession) RequestContextHolder.currentRequestAttributes().resolveReference(RequestAttributes.REFERENCE_SESSION);

        if (httpSession!=null && (Usuario)httpSession.getAttribute("usuario")!=null && ((String)((Usuario)httpSession.getAttribute("usuario")).getNomina())!=null) {
            String nomina = (String)((Usuario)httpSession.getAttribute("usuario")).getNomina();
            String prepSql = "{ call DBMS_SESSION.SET_IDENTIFIER('" + nomina +"') }";
            CallableStatement cs = connection.prepareCall(prepSql);                             
            cs.execute();
            cs.close();         
        }
    }
} 

해결법

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

    1.예, 저는 생각합니다 : 실제로 pointcuts는 원하는 호출과 일치하지만, javax 패키지와 같이 기본적으로 위빙에서 제외 된 java 패키지에 있습니다.

    예, 저는 생각합니다 : 실제로 pointcuts는 원하는 호출과 일치하지만, javax 패키지와 같이 기본적으로 위빙에서 제외 된 java 패키지에 있습니다.

    명령 줄과 aop.xml을 통해 이러한 제한을 제거하는 방법이 있지만 클래스로드와 관련된 잠재적 인 문제점을 알고 있어야합니다. 자바 클래스를로드하는 클래스 로더에 위버가 첨부되어 있는지 확인해야합니다. LTW를 사용하지 않는 옵션이 있다면 JDK 클래스 파일을 짜고 그 클래스를 사용하면됩니다. 그렇지 않으면 "암탉과 알"문제가있을 수 있습니다.

  2. ==============================

    2.xml 파일에 아래 태그를 추가했는지 확인하십시오.

    xml 파일에 아래 태그를 추가했는지 확인하십시오.

    aop : aspectj-autoproxy

    또한이 ConnectionAspect 클래스의 xml에 bean 정의를 추가했는지 확인하십시오.

  3. from https://stackoverflow.com/questions/12057063/spring-3-0-aop-aspectjautoproxy-intercept-any-call-to-getconnection by cc-by-sa and MIT license