!325 update 优化aop语法 使用spring自动注入注解 基于注解拦截的aop注解不可能为空
Merge pull request !325 from 疯狂的狮子Li/master
This commit is contained in:
		| @@ -1,12 +1,8 @@ | |||||||
| package com.ruoyi.framework.aspectj; | package com.ruoyi.framework.aspectj; | ||||||
|  |  | ||||||
| import java.lang.reflect.Method; |  | ||||||
| import org.aspectj.lang.JoinPoint; | import org.aspectj.lang.JoinPoint; | ||||||
| import org.aspectj.lang.Signature; |  | ||||||
| import org.aspectj.lang.annotation.Aspect; | import org.aspectj.lang.annotation.Aspect; | ||||||
| import org.aspectj.lang.annotation.Before; | import org.aspectj.lang.annotation.Before; | ||||||
| import org.aspectj.lang.annotation.Pointcut; |  | ||||||
| import org.aspectj.lang.reflect.MethodSignature; |  | ||||||
| import org.springframework.stereotype.Component; | import org.springframework.stereotype.Component; | ||||||
| import com.ruoyi.common.annotation.DataScope; | import com.ruoyi.common.annotation.DataScope; | ||||||
| import com.ruoyi.common.core.domain.BaseEntity; | import com.ruoyi.common.core.domain.BaseEntity; | ||||||
| @@ -55,27 +51,15 @@ public class DataScopeAspect | |||||||
|      */ |      */ | ||||||
|     public static final String DATA_SCOPE = "dataScope"; |     public static final String DATA_SCOPE = "dataScope"; | ||||||
|  |  | ||||||
|     // 配置织入点 |     @Before("@annotation(controllerDataScope)") | ||||||
|     @Pointcut("@annotation(com.ruoyi.common.annotation.DataScope)") |     public void doBefore(JoinPoint point, DataScope controllerDataScope) throws Throwable | ||||||
|     public void dataScopePointCut() |  | ||||||
|     { |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Before("dataScopePointCut()") |  | ||||||
|     public void doBefore(JoinPoint point) throws Throwable |  | ||||||
|     { |     { | ||||||
|         clearDataScope(point); |         clearDataScope(point); | ||||||
|         handleDataScope(point); |         handleDataScope(point, controllerDataScope); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     protected void handleDataScope(final JoinPoint joinPoint) |     protected void handleDataScope(final JoinPoint joinPoint, DataScope controllerDataScope) | ||||||
|     { |     { | ||||||
|         // 获得注解 |  | ||||||
|         DataScope controllerDataScope = getAnnotationLog(joinPoint); |  | ||||||
|         if (controllerDataScope == null) |  | ||||||
|         { |  | ||||||
|             return; |  | ||||||
|         } |  | ||||||
|         // 获取当前的用户 |         // 获取当前的用户 | ||||||
|         LoginUser loginUser = SecurityUtils.getLoginUser(); |         LoginUser loginUser = SecurityUtils.getLoginUser(); | ||||||
|         if (StringUtils.isNotNull(loginUser)) |         if (StringUtils.isNotNull(loginUser)) | ||||||
| @@ -150,22 +134,6 @@ public class DataScopeAspect | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * 是否存在注解,如果存在就获取 |  | ||||||
|      */ |  | ||||||
|     private DataScope getAnnotationLog(JoinPoint joinPoint) |  | ||||||
|     { |  | ||||||
|         Signature signature = joinPoint.getSignature(); |  | ||||||
|         MethodSignature methodSignature = (MethodSignature) signature; |  | ||||||
|         Method method = methodSignature.getMethod(); |  | ||||||
|  |  | ||||||
|         if (method != null) |  | ||||||
|         { |  | ||||||
|             return method.getAnnotation(DataScope.class); |  | ||||||
|         } |  | ||||||
|         return null; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 拼接权限sql前先清空params.dataScope参数防止注入 |      * 拼接权限sql前先清空params.dataScope参数防止注入 | ||||||
|      */ |      */ | ||||||
|   | |||||||
| @@ -1,18 +1,13 @@ | |||||||
| package com.ruoyi.framework.aspectj; | package com.ruoyi.framework.aspectj; | ||||||
|  |  | ||||||
| import java.util.Objects; |  | ||||||
| import org.aspectj.lang.ProceedingJoinPoint; | import org.aspectj.lang.ProceedingJoinPoint; | ||||||
| import org.aspectj.lang.annotation.Around; | import org.aspectj.lang.annotation.Around; | ||||||
| import org.aspectj.lang.annotation.Aspect; | import org.aspectj.lang.annotation.Aspect; | ||||||
| import org.aspectj.lang.annotation.Pointcut; |  | ||||||
| import org.aspectj.lang.reflect.MethodSignature; |  | ||||||
| import org.slf4j.Logger; | import org.slf4j.Logger; | ||||||
| import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||||
| import org.springframework.core.annotation.AnnotationUtils; |  | ||||||
| import org.springframework.core.annotation.Order; | import org.springframework.core.annotation.Order; | ||||||
| import org.springframework.stereotype.Component; | import org.springframework.stereotype.Component; | ||||||
| import com.ruoyi.common.annotation.DataSource; | import com.ruoyi.common.annotation.DataSource; | ||||||
| import com.ruoyi.common.utils.StringUtils; |  | ||||||
| import com.ruoyi.framework.datasource.DynamicDataSourceContextHolder; | import com.ruoyi.framework.datasource.DynamicDataSourceContextHolder; | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @@ -27,22 +22,11 @@ public class DataSourceAspect | |||||||
| { | { | ||||||
|     protected Logger logger = LoggerFactory.getLogger(getClass()); |     protected Logger logger = LoggerFactory.getLogger(getClass()); | ||||||
|  |  | ||||||
|     @Pointcut("@annotation(com.ruoyi.common.annotation.DataSource)" |     @Around("@annotation(dataSource) || @within(dataSource)") | ||||||
|             + "|| @within(com.ruoyi.common.annotation.DataSource)") |     public Object around(ProceedingJoinPoint point, DataSource dataSource) throws Throwable | ||||||
|     public void dsPointCut() |  | ||||||
|     { |     { | ||||||
|  |  | ||||||
|     } |         DynamicDataSourceContextHolder.setDataSourceType(dataSource.value().name()); | ||||||
|  |  | ||||||
|     @Around("dsPointCut()") |  | ||||||
|     public Object around(ProceedingJoinPoint point) throws Throwable |  | ||||||
|     { |  | ||||||
|         DataSource dataSource = getDataSource(point); |  | ||||||
|  |  | ||||||
|         if (StringUtils.isNotNull(dataSource)) |  | ||||||
|         { |  | ||||||
|             DynamicDataSourceContextHolder.setDataSourceType(dataSource.value().name()); |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         try |         try | ||||||
|         { |         { | ||||||
| @@ -55,18 +39,4 @@ public class DataSourceAspect | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * 获取需要切换的数据源 |  | ||||||
|      */ |  | ||||||
|     public DataSource getDataSource(ProceedingJoinPoint point) |  | ||||||
|     { |  | ||||||
|         MethodSignature signature = (MethodSignature) point.getSignature(); |  | ||||||
|         DataSource dataSource = AnnotationUtils.findAnnotation(signature.getMethod(), DataSource.class); |  | ||||||
|         if (Objects.nonNull(dataSource)) |  | ||||||
|         { |  | ||||||
|             return dataSource; |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         return AnnotationUtils.findAnnotation(signature.getDeclaringType(), DataSource.class); |  | ||||||
|     } |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,18 +1,13 @@ | |||||||
| package com.ruoyi.framework.aspectj; | package com.ruoyi.framework.aspectj; | ||||||
|  |  | ||||||
| import java.lang.reflect.Method; |  | ||||||
| import java.util.Collection; | import java.util.Collection; | ||||||
| import java.util.Iterator; |  | ||||||
| import java.util.Map; | import java.util.Map; | ||||||
| import javax.servlet.http.HttpServletRequest; | import javax.servlet.http.HttpServletRequest; | ||||||
| import javax.servlet.http.HttpServletResponse; | import javax.servlet.http.HttpServletResponse; | ||||||
| import org.aspectj.lang.JoinPoint; | import org.aspectj.lang.JoinPoint; | ||||||
| import org.aspectj.lang.Signature; |  | ||||||
| import org.aspectj.lang.annotation.AfterReturning; | import org.aspectj.lang.annotation.AfterReturning; | ||||||
| import org.aspectj.lang.annotation.AfterThrowing; | import org.aspectj.lang.annotation.AfterThrowing; | ||||||
| import org.aspectj.lang.annotation.Aspect; | import org.aspectj.lang.annotation.Aspect; | ||||||
| import org.aspectj.lang.annotation.Pointcut; |  | ||||||
| import org.aspectj.lang.reflect.MethodSignature; |  | ||||||
| import org.slf4j.Logger; | import org.slf4j.Logger; | ||||||
| import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||||
| import org.springframework.stereotype.Component; | import org.springframework.stereotype.Component; | ||||||
| @@ -43,21 +38,15 @@ public class LogAspect | |||||||
| { | { | ||||||
|     private static final Logger log = LoggerFactory.getLogger(LogAspect.class); |     private static final Logger log = LoggerFactory.getLogger(LogAspect.class); | ||||||
|  |  | ||||||
|     // 配置织入点 |  | ||||||
|     @Pointcut("@annotation(com.ruoyi.common.annotation.Log)") |  | ||||||
|     public void logPointCut() |  | ||||||
|     { |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 处理完请求后执行 |      * 处理完请求后执行 | ||||||
|      * |      * | ||||||
|      * @param joinPoint 切点 |      * @param joinPoint 切点 | ||||||
|      */ |      */ | ||||||
|     @AfterReturning(pointcut = "logPointCut()", returning = "jsonResult") |     @AfterReturning(pointcut = "@annotation(controllerLog)", returning = "jsonResult") | ||||||
|     public void doAfterReturning(JoinPoint joinPoint, Object jsonResult) |     public void doAfterReturning(JoinPoint joinPoint, Log controllerLog, Object jsonResult) | ||||||
|     { |     { | ||||||
|         handleLog(joinPoint, null, jsonResult); |         handleLog(joinPoint, controllerLog, null, jsonResult); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @@ -66,22 +55,16 @@ public class LogAspect | |||||||
|      * @param joinPoint 切点 |      * @param joinPoint 切点 | ||||||
|      * @param e 异常 |      * @param e 异常 | ||||||
|      */ |      */ | ||||||
|     @AfterThrowing(value = "logPointCut()", throwing = "e") |     @AfterThrowing(value = "@annotation(controllerLog)", throwing = "e") | ||||||
|     public void doAfterThrowing(JoinPoint joinPoint, Exception e) |     public void doAfterThrowing(JoinPoint joinPoint, Log controllerLog, Exception e) | ||||||
|     { |     { | ||||||
|         handleLog(joinPoint, e, null); |         handleLog(joinPoint, controllerLog, e, null); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     protected void handleLog(final JoinPoint joinPoint, final Exception e, Object jsonResult) |     protected void handleLog(final JoinPoint joinPoint, Log controllerLog, final Exception e, Object jsonResult) | ||||||
|     { |     { | ||||||
|         try |         try | ||||||
|         { |         { | ||||||
|             // 获得注解 |  | ||||||
|             Log controllerLog = getAnnotationLog(joinPoint); |  | ||||||
|             if (controllerLog == null) |  | ||||||
|             { |  | ||||||
|                 return; |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             // 获取当前的用户 |             // 获取当前的用户 | ||||||
|             LoginUser loginUser = SecurityUtils.getLoginUser(); |             LoginUser loginUser = SecurityUtils.getLoginUser(); | ||||||
| @@ -172,22 +155,6 @@ public class LogAspect | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * 是否存在注解,如果存在就获取 |  | ||||||
|      */ |  | ||||||
|     private Log getAnnotationLog(JoinPoint joinPoint) throws Exception |  | ||||||
|     { |  | ||||||
|         Signature signature = joinPoint.getSignature(); |  | ||||||
|         MethodSignature methodSignature = (MethodSignature) signature; |  | ||||||
|         Method method = methodSignature.getMethod(); |  | ||||||
|  |  | ||||||
|         if (method != null) |  | ||||||
|         { |  | ||||||
|             return method.getAnnotation(Log.class); |  | ||||||
|         } |  | ||||||
|         return null; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 参数拼装 |      * 参数拼装 | ||||||
|      */ |      */ | ||||||
| @@ -196,11 +163,11 @@ public class LogAspect | |||||||
|         String params = ""; |         String params = ""; | ||||||
|         if (paramsArray != null && paramsArray.length > 0) |         if (paramsArray != null && paramsArray.length > 0) | ||||||
|         { |         { | ||||||
|             for (int i = 0; i < paramsArray.length; i++) |             for (Object o : paramsArray) | ||||||
|             { |             { | ||||||
|                 if (StringUtils.isNotNull(paramsArray[i]) && !isFilterObject(paramsArray[i])) |                 if (StringUtils.isNotNull(o) && !isFilterObject(o)) | ||||||
|                 { |                 { | ||||||
|                     Object jsonObj = JSON.toJSON(paramsArray[i]); |                     Object jsonObj = JSON.toJSON(o); | ||||||
|                     params += jsonObj.toString() + " "; |                     params += jsonObj.toString() + " "; | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| @@ -225,17 +192,17 @@ public class LogAspect | |||||||
|         else if (Collection.class.isAssignableFrom(clazz)) |         else if (Collection.class.isAssignableFrom(clazz)) | ||||||
|         { |         { | ||||||
|             Collection collection = (Collection) o; |             Collection collection = (Collection) o; | ||||||
|             for (Iterator iter = collection.iterator(); iter.hasNext();) |             for (Object value : collection) | ||||||
|             { |             { | ||||||
|                 return iter.next() instanceof MultipartFile; |                 return value instanceof MultipartFile; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         else if (Map.class.isAssignableFrom(clazz)) |         else if (Map.class.isAssignableFrom(clazz)) | ||||||
|         { |         { | ||||||
|             Map map = (Map) o; |             Map map = (Map) o; | ||||||
|             for (Iterator iter = map.entrySet().iterator(); iter.hasNext();) |             for (Object value : map.entrySet()) | ||||||
|             { |             { | ||||||
|                 Map.Entry entry = (Map.Entry) iter.next(); |                 Map.Entry entry = (Map.Entry) value; | ||||||
|                 return entry.getValue() instanceof MultipartFile; |                 return entry.getValue() instanceof MultipartFile; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -49,16 +49,9 @@ public class RateLimiterAspect | |||||||
|         this.limitScript = limitScript; |         this.limitScript = limitScript; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // 配置织入点 |     @Before("@annotation(rateLimiter)") | ||||||
|     @Pointcut("@annotation(com.ruoyi.common.annotation.RateLimiter)") |     public void doBefore(JoinPoint point, RateLimiter rateLimiter) throws Throwable | ||||||
|     public void rateLimiterPointCut() |  | ||||||
|     { |     { | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Before("rateLimiterPointCut()") |  | ||||||
|     public void doBefore(JoinPoint point) throws Throwable |  | ||||||
|     { |  | ||||||
|         RateLimiter rateLimiter = getAnnotationRateLimiter(point); |  | ||||||
|         String key = rateLimiter.key(); |         String key = rateLimiter.key(); | ||||||
|         int time = rateLimiter.time(); |         int time = rateLimiter.time(); | ||||||
|         int count = rateLimiter.count(); |         int count = rateLimiter.count(); | ||||||
| @@ -84,22 +77,6 @@ public class RateLimiterAspect | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * 是否存在注解,如果存在就获取 |  | ||||||
|      */ |  | ||||||
|     private RateLimiter getAnnotationRateLimiter(JoinPoint joinPoint) |  | ||||||
|     { |  | ||||||
|         Signature signature = joinPoint.getSignature(); |  | ||||||
|         MethodSignature methodSignature = (MethodSignature) signature; |  | ||||||
|         Method method = methodSignature.getMethod(); |  | ||||||
|  |  | ||||||
|         if (method != null) |  | ||||||
|         { |  | ||||||
|             return method.getAnnotation(RateLimiter.class); |  | ||||||
|         } |  | ||||||
|         return null; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public String getCombineKey(RateLimiter rateLimiter, JoinPoint point) |     public String getCombineKey(RateLimiter rateLimiter, JoinPoint point) | ||||||
|     { |     { | ||||||
|         StringBuffer stringBuffer = new StringBuffer(rateLimiter.key()); |         StringBuffer stringBuffer = new StringBuffer(rateLimiter.key()); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user