Bladeren bron

【修复】修复未登录的接口记录日志操作时,获取当前登录用户账号报错的问题,兼容处理

就是那个锅 4 jaren geleden
bovenliggende
commit
798022c309

+ 9 - 0
guns-base-support/guns-core/src/main/java/cn/stylefeng/guns/core/context/login/LoginContext.java

@ -45,6 +45,15 @@ public interface LoginContext {
     */
    SysLoginUser getSysLoginUser();
    /**
     * 获取当前登录用户,如未登录,则返回null,不抛异常
     *
     * @return 当前登录用户信息
     * @author xuyuxiang
     * @date 2020/3/13 14:40
     */
    SysLoginUser getSysLoginUserWithoutException();
    /**
     * 获取当前登录用户的id
     *

+ 15 - 4
guns-base-support/guns-system/src/main/java/cn/stylefeng/guns/sys/core/aop/BusinessLogAop.java

@ -24,9 +24,12 @@ Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意
 */
package cn.stylefeng.guns.sys.core.aop;
import cn.hutool.core.util.ObjectUtil;
import cn.stylefeng.guns.core.annotion.BusinessLog;
import cn.stylefeng.guns.core.consts.AopSortConstant;
import cn.stylefeng.guns.core.consts.CommonConstant;
import cn.stylefeng.guns.core.context.login.LoginContextHolder;
import cn.stylefeng.guns.core.pojo.login.SysLoginUser;
import cn.stylefeng.guns.sys.core.log.LogManager;
import com.alibaba.fastjson.JSON;
import org.aspectj.lang.JoinPoint;
@ -70,10 +73,14 @@ public class BusinessLogAop {
        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
        Method method = methodSignature.getMethod();
        BusinessLog businessLog = method.getAnnotation(BusinessLog.class);
        SysLoginUser sysLoginUser = LoginContextHolder.me().getSysLoginUserWithoutException();
        String account = CommonConstant.UNKNOWN;
        if(ObjectUtil.isNotNull(sysLoginUser)) {
            account = sysLoginUser.getAccount();
        }
        //异步记录日志
        LogManager.me().executeOperationLog(
                businessLog, LoginContextHolder.me().getSysLoginUserAccount(), joinPoint, JSON.toJSONString(result));
                businessLog, account, joinPoint, JSON.toJSONString(result));
    }
    /**
@ -87,9 +94,13 @@ public class BusinessLogAop {
        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
        Method method = methodSignature.getMethod();
        BusinessLog businessLog = method.getAnnotation(BusinessLog.class);
        SysLoginUser sysLoginUser = LoginContextHolder.me().getSysLoginUserWithoutException();
        String account = CommonConstant.UNKNOWN;
        if(ObjectUtil.isNotNull(sysLoginUser)) {
            account = sysLoginUser.getAccount();
        }
        //异步记录日志
        LogManager.me().executeExceptionLog(
                businessLog, LoginContextHolder.me().getSysLoginUserAccount(), joinPoint, exception);
                businessLog, account, joinPoint, exception);
    }
}

+ 16 - 0
guns-base-support/guns-system/src/main/java/cn/stylefeng/guns/sys/modular/auth/context/LoginContextSpringSecurityImpl.java

@ -76,6 +76,22 @@ public class LoginContextSpringSecurityImpl implements LoginContext {
        }
    }
    /**
     * 获取当前登录用户,如未登录,则返回null,不抛异常
     *
     * @author xuyuxiang
     * @date 2020/3/13 14:42
     */
    @Override
    public SysLoginUser getSysLoginUserWithoutException() {
        Authentication authentication = authService.getAuthentication();
        if (ObjectUtil.isEmpty(authentication) || authentication.getPrincipal() instanceof String) {
            return null;
        } else {
            return (SysLoginUser) authentication.getPrincipal();
        }
    }
    /**
     * 获取当前登录用户的id
     *