package com.jsl.oa.aspect; import com.jsl.oa.dao.UserDAO; import com.jsl.oa.exception.library.NotLoginException; import com.jsl.oa.exception.library.UserCanntUse; import com.jsl.oa.model.dodata.UserDO; import com.jsl.oa.utils.Processing; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; /** * 检查用户权限切面 *
* 检查用户能否正常使用,在用户使用之前进行可用性检查 * * @since v1.2.0 * @version v1.2.0 * @author xiao_lfeng */ @Slf4j @Aspect @Component @RequiredArgsConstructor public class CheckUserAbleToUseAspect { private final UserDAO userDAO; @Around("@annotation(com.jsl.oa.annotations.NeedRoleGroup)") public Object checkUse(ProceedingJoinPoint pjp) throws Throwable { // 从ServletRequest中获取用户信息 ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); if (servletRequestAttributes != null) { // 获取用户 Long getUserId = Processing.getAuthHeaderToUserId(servletRequestAttributes.getRequest()); if (getUserId == null) { throw new NotLoginException("用户信息不存在"); } // 获取用户详细信息 UserDO getUser = userDAO.getUserById(getUserId); if (getUser != null) { // 用户是否被禁用 if (!getUser.getEnabled()) { throw new UserCanntUse("用户未启用"); } // 用户是否被封禁 if (!getUser.getAccountNoLocked()) { throw new UserCanntUse("用户被封禁"); } // 用户是否被删除 if (getUser.getIsDelete()) { throw new UserCanntUse("用户被删除"); } // 用户是否过期 if (!getUser.getAccountNoExpired()) { throw new UserCanntUse("用户已过期"); } return pjp.proceed(); } else { throw new NotLoginException("用户信息不存在"); } } else { throw new RuntimeException("无法获取信息"); } } }