|  | @ -0,0 +1,66 @@
 | 
	
		
			
				|  |  | package com.yihu.hos.interceptor;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | import com.yihu.hos.common.constants.ContextAttributes;
 | 
	
		
			
				|  |  | import org.apache.commons.lang3.StringUtils;
 | 
	
		
			
				|  |  | import org.aspectj.lang.ProceedingJoinPoint;
 | 
	
		
			
				|  |  | import org.aspectj.lang.annotation.Around;
 | 
	
		
			
				|  |  | import org.aspectj.lang.annotation.Aspect;
 | 
	
		
			
				|  |  | import org.springframework.stereotype.Component;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | /**
 | 
	
		
			
				|  |  |  *  jdbctemplate 预编译执行拦截
 | 
	
		
			
				|  |  |  * @author HZY
 | 
	
		
			
				|  |  |  * @vsrsion 1.0
 | 
	
		
			
				|  |  |  * Created at 2016/12/7.
 | 
	
		
			
				|  |  |  */
 | 
	
		
			
				|  |  | @Aspect
 | 
	
		
			
				|  |  | @Component
 | 
	
		
			
				|  |  | public class JdbcTemplateAdvice {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @Around("execution(* org.springframework.jdbc.core.JdbcTemplate.query*(..)) || execution(* org.springframework.jdbc.core.JdbcTemplate.execute*(..))")
 | 
	
		
			
				|  |  |     public void process(ProceedingJoinPoint point) throws Throwable {
 | 
	
		
			
				|  |  |         String schemaName = getSchema();
 | 
	
		
			
				|  |  |         //访问目标方法的参数:
 | 
	
		
			
				|  |  |         Object[] args = point.getArgs();
 | 
	
		
			
				|  |  |         if (args != null && args.length > 0 && args[0].getClass() == String.class) {
 | 
	
		
			
				|  |  |             String completeSql = args[0].toString();
 | 
	
		
			
				|  |  |             if (StringUtils.isNotEmpty(schemaName)) {
 | 
	
		
			
				|  |  |                 String myCatAnnotation = "/*#mycat:schema=" + schemaName + "*/ ";
 | 
	
		
			
				|  |  |                 completeSql = myCatAnnotation + completeSql;
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             args[0]=completeSql;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         //用改变后的参数执行目标方法
 | 
	
		
			
				|  |  |         point.proceed(args);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | //    @Before("execution(* org.springframework.jdbc.core.JdbcTemplate.query*(..)) || execution(* org.springframework.jdbc.core.JdbcTemplate.execute*(..))")
 | 
	
		
			
				|  |  | //    public void permissionCheck(JoinPoint point) {
 | 
	
		
			
				|  |  | //        System.out.println("@Before:模拟权限检查...");
 | 
	
		
			
				|  |  | //        System.out.println("@Before:目标方法为:" +
 | 
	
		
			
				|  |  | //                point.getSignature().getDeclaringTypeName() +
 | 
	
		
			
				|  |  | //                "." + point.getSignature().getName());
 | 
	
		
			
				|  |  | //        System.out.println("@Before:参数为:" + Arrays.toString(point.getArgs()));
 | 
	
		
			
				|  |  | //        System.out.println("@Before:被织入的目标对象为:" + point.getTarget());
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        String schemaName = getSchema();
 | 
	
		
			
				|  |  | //        //访问目标方法的参数:
 | 
	
		
			
				|  |  | //        Object[] args = point.getArgs();
 | 
	
		
			
				|  |  | //        if (args != null && args.length > 0 && args[0].getClass() == String.class) {
 | 
	
		
			
				|  |  | //            String completeSql = args[0].toString();
 | 
	
		
			
				|  |  | //            if (StringUtils.isNotEmpty(schemaName)) {
 | 
	
		
			
				|  |  | //                String myCatAnnotation = "/*#mycat:schema=" + schemaName + "*/ ";
 | 
	
		
			
				|  |  | //                completeSql = myCatAnnotation + completeSql;
 | 
	
		
			
				|  |  | //            }
 | 
	
		
			
				|  |  | //            args[0]=completeSql;
 | 
	
		
			
				|  |  | //        }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     private String getSchema() {
 | 
	
		
			
				|  |  |         return LocalContext.getContext().getAttachment(ContextAttributes.SCHEMA);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | }
 |