| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.framework.aspectj; |
| | | |
| | | import com.ruoyi.common.annotation.AutoInit; |
| | | import com.ruoyi.common.utils.SecurityUtils; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import org.aspectj.lang.JoinPoint; |
| | | import org.aspectj.lang.annotation.Aspect; |
| | | import org.aspectj.lang.annotation.Before; |
| | | import org.aspectj.lang.annotation.Pointcut; |
| | | import org.aspectj.lang.reflect.MethodSignature; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.lang.reflect.Method; |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * èªå¨å¡«å
orgidåé¢ |
| | | * |
| | | * @author smartor |
| | | */ |
| | | @Aspect |
| | | @Component |
| | | public class AutoInitAspect { |
| | | |
| | | private static final Logger log = LoggerFactory.getLogger(AutoInit.class); |
| | | |
| | | /** |
| | | * å®ä¹åç¹ - æ¦æªææå¸¦æ@AutoInitæ³¨è§£çæ¹æ³ |
| | | */ |
| | | @Pointcut("@annotation(com.ruoyi.common.annotation.AutoInit)") |
| | | public void autoInitPointCut() { |
| | | } |
| | | |
| | | /** |
| | | * 卿¹æ³æ§è¡åèªå¨åå§å |
| | | * |
| | | * @param joinPoint åç¹ |
| | | * @param autoInit 注解对象 |
| | | */ |
| | | @Before("autoInitPointCut() && @annotation(autoInit)") |
| | | public void doBefore(JoinPoint joinPoint, AutoInit autoInit) { |
| | | try { |
| | | // è·åå½åç»å½ç¨æ·çorgid |
| | | String orgid = SecurityUtils.getLoginUser().getUser().getOrgid(); |
| | | |
| | | // 妿orgid为空ï¼åä¸åå§å |
| | | if (StringUtils.isEmpty(orgid)) { |
| | | log.warn("å½åç¨æ·orgid为空ï¼è·³è¿èªå¨åå§å"); |
| | | return; |
| | | } |
| | | |
| | | // è·åæ¹æ³åæ° |
| | | Object[] args = joinPoint.getArgs(); |
| | | if (args == null || args.length == 0) { |
| | | return; |
| | | } |
| | | |
| | | // è·åæ¹æ³ç¾å |
| | | MethodSignature signature = (MethodSignature) joinPoint.getSignature(); |
| | | Method method = signature.getMethod(); |
| | | String[] parameterNames = signature.getParameterNames(); |
| | | |
| | | // è·å注解é
ç½®çåæ°åå表 |
| | | String[] configuredParamNames = autoInit.paramNames(); |
| | | List<String> targetParamNames = configuredParamNames.length > 0 |
| | | ? Arrays.asList(configuredParamNames) |
| | | : null; |
| | | |
| | | // éåææåæ° |
| | | for (int i = 0; i < args.length; i++) { |
| | | Object arg = args[i]; |
| | | if (arg == null) { |
| | | continue; |
| | | } |
| | | |
| | | // 妿æå®äºåæ°åï¼æ£æ¥å½ååæ°æ¯å¦å¨æå®åè¡¨ä¸ |
| | | if (targetParamNames != null && !targetParamNames.contains(parameterNames[i])) { |
| | | continue; |
| | | } |
| | | |
| | | // å°è¯å¡«å
orgid |
| | | setOrgId(arg, orgid, autoInit.override()); |
| | | } |
| | | |
| | | } catch (Exception e) { |
| | | log.error("èªå¨å¡«å
orgid失败", e); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * å¡«å
orgidå°ç®æ 对象 |
| | | * |
| | | * @param target ç®æ 对象 |
| | | * @param orgid è¦å¡«å
çorgidå¼ |
| | | * @param override æ¯å¦è¦çå·²æå¼ |
| | | */ |
| | | private void setOrgId(Object target, String orgid, boolean override) { |
| | | try { |
| | | Class<?> clazz = target.getClass(); |
| | | |
| | | // å°è¯è·ågetOrgidæ¹æ³ |
| | | Method getOrgidMethod = null; |
| | | try { |
| | | getOrgidMethod = clazz.getMethod("getOrgid"); |
| | | } catch (NoSuchMethodException e) { |
| | | // 对象没ægetOrgidæ¹æ³ï¼è·³è¿ |
| | | return; |
| | | } |
| | | |
| | | // æ£æ¥æ¯å¦éè¦è¦ç |
| | | if (!override) { |
| | | Object existingOrgid = getOrgidMethod.invoke(target); |
| | | if (existingOrgid != null && StringUtils.isNotEmpty(existingOrgid.toString())) { |
| | | log.debug("对象已æorgidå¼: {}ï¼è·³è¿å¡«å
", existingOrgid); |
| | | return; |
| | | } |
| | | } |
| | | |
| | | // è·åsetOrgidæ¹æ³å¹¶å¡«å
å¼ |
| | | Method setOrgidMethod = clazz.getMethod("setOrgid", String.class); |
| | | setOrgidMethod.invoke(target, orgid); |
| | | |
| | | log.debug("æå为对象 {} å¡«å
orgid: {}", clazz.getSimpleName(), orgid); |
| | | |
| | | } catch (NoSuchMethodException e) { |
| | | // 对象没æsetOrgidæ¹æ³ï¼è·³è¿ |
| | | log.debug("对象 {} 没æsetOrgidæ¹æ³ï¼è·³è¿å¡«å
", target.getClass().getSimpleName()); |
| | | } catch (Exception e) { |
| | | log.error("å¡«å
orgidæ¶åçå¼å¸¸: {}", e.getMessage()); |
| | | } |
| | | } |
| | | } |