diff --git a/src/main/java/com/jsl/oa/annotations/CheckUserAbleToUse.java b/src/main/java/com/jsl/oa/annotations/CheckUserAbleToUse.java
deleted file mode 100644
index 508fc24..0000000
--- a/src/main/java/com/jsl/oa/annotations/CheckUserAbleToUse.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.jsl.oa.annotations;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- *
检查用户是否可用
- *
- * 用于检查用户是否可用
- *
- * @version v1.1.0
- * @since v1.1.0
- * @see com.jsl.oa.aspect.AnnotationsAspect
- * @author xiao_lfeng
- */
-@Target(ElementType.METHOD)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface CheckUserAbleToUse {
- /**
- * 是否启用
- *
- * 用于指定是否启用
- * 请注意,禁用后任何用户权限校验不校验用户是否启用
- *
- * @return {@link Boolean}
- */
- boolean isCheckEnable() default true;
-
- /**
- * 是否删除
- *
- * 用于指定是否删除
- * 请注意,禁用后任何用户权限校验不校验用户是否删除
- *
- * @return {@link Boolean}
- */
- boolean isCheckDelete() default true;
-
- /**
- * 是否锁定
- *
- * 用于指定是否锁定
- * 请注意,禁用后任何用户权限校验不校验用户是否锁定
- *
- * @return {@link Boolean}
- */
- boolean isCheckLock() default true;
-
- /**
- * 是否过期
- *
- * 用于指定是否过期
- * 请注意,禁用后任何用户权限校验不校验用户是否过期
- *
- * @return {@link Boolean}
- */
- boolean isCheckExpire() default true;
-}
diff --git a/src/main/java/com/jsl/oa/annotations/CheckUserHasPermission.java b/src/main/java/com/jsl/oa/annotations/NeedRoleGroup.java
similarity index 57%
rename from src/main/java/com/jsl/oa/annotations/CheckUserHasPermission.java
rename to src/main/java/com/jsl/oa/annotations/NeedRoleGroup.java
index 824f40e..2f4c7c2 100644
--- a/src/main/java/com/jsl/oa/annotations/CheckUserHasPermission.java
+++ b/src/main/java/com/jsl/oa/annotations/NeedRoleGroup.java
@@ -14,7 +14,7 @@ import java.lang.annotation.*;
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
-public @interface CheckUserHasPermission {
+public @interface NeedRoleGroup {
/**
* 权限名称
*
@@ -23,14 +23,4 @@ public @interface CheckUserHasPermission {
* @return {@link String}
*/
String value() default "";
-
- /**
- * 是否检查
- *
- * 用于指定是否检查
- * 请注意,该方法只会禁止检查权限,但是不会禁止检查用户是否允许继续执行
- * @since v1.1.0
- * @return {@link Boolean}
- */
- boolean isCheck() default true;
}
diff --git a/src/main/java/com/jsl/oa/annotations/UserAbleToUse.java b/src/main/java/com/jsl/oa/annotations/UserAbleToUse.java
new file mode 100644
index 0000000..1e7a847
--- /dev/null
+++ b/src/main/java/com/jsl/oa/annotations/UserAbleToUse.java
@@ -0,0 +1,19 @@
+package com.jsl.oa.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 检查用户是否可用
+ *
+ * 用于检查用户是否可用
+ *
+ * @version v1.1.0
+ * @since v1.1.0
+ * @author xiao_lfeng
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface UserAbleToUse { }
diff --git a/src/main/java/com/jsl/oa/aspect/AnnotationsAspect.java b/src/main/java/com/jsl/oa/aspect/AnnotationsAspect.java
deleted file mode 100644
index 6578f3c..0000000
--- a/src/main/java/com/jsl/oa/aspect/AnnotationsAspect.java
+++ /dev/null
@@ -1,206 +0,0 @@
-package com.jsl.oa.aspect;
-
-import com.jsl.oa.annotations.CheckUserAbleToUse;
-import com.jsl.oa.annotations.CheckUserHasPermission;
-import com.jsl.oa.dao.PermissionDAO;
-import com.jsl.oa.dao.RoleDAO;
-import com.jsl.oa.mapper.UserMapper;
-import com.jsl.oa.model.dodata.RoleDO;
-import com.jsl.oa.model.dodata.RoleUserDO;
-import com.jsl.oa.model.dodata.UserDO;
-import com.jsl.oa.utils.BaseResponse;
-import com.jsl.oa.utils.ErrorCode;
-import com.jsl.oa.utils.Processing;
-import com.jsl.oa.utils.ResultUtil;
-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.aspectj.lang.reflect.MethodSignature;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-import org.springframework.stereotype.Component;
-import org.springframework.web.context.request.RequestContextHolder;
-import org.springframework.web.context.request.ServletRequestAttributes;
-
-import javax.servlet.http.HttpServletRequest;
-import java.lang.reflect.Method;
-import java.util.List;
-import java.util.Objects;
-
-/**
- * 注解切面
- *
- * 用于注解的切面
- *
- * @author xiao_lfeng
- * @version v1.1.0
- * @since v1.1.0
- */
-@Slf4j
-@Aspect
-@Component
-@RequiredArgsConstructor
-public class AnnotationsAspect {
- private final UserMapper userMapper;
- private final RoleDAO roleDAO;
- private final PermissionDAO permissionDAO;
-
- /**
- * 检查用户是否有权限
- *
- * 检查用户是否有权限
- *
- * @param pjp ProceedingJoinPoint对象
- * @return {@link Object}
- * @throws Throwable 异常
- */
- @Around("@annotation(com.jsl.oa.annotations.CheckUserHasPermission)")
- public Object checkUserHasPermission(@NotNull ProceedingJoinPoint pjp) throws Throwable {
- log.info("用户权限检查");
- // 获取 HttpServletRequest 对象
- HttpServletRequest request =
- ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes()))
- .getRequest();
-
- // 获取注解方法
- CheckUserHasPermission checkUserHasPermission = getCheckUserHasPermission(pjp);
- // 获取注解值
- String permissionName = null;
- boolean permissionCheck = true;
- if (checkUserHasPermission != null) {
- permissionName = checkUserHasPermission.value();
- permissionCheck = checkUserHasPermission.isCheck();
- }
-
- // 获取用户信息
- Long userId = Processing.getAuthHeaderToUserId(request);
- if (userId != null) {
- // 检查用户是否允许继续执行
- BaseResponse checkUserAbleToNext = checkUserAbleToNext(userId, userMapper);
- if (checkUserAbleToNext != null) {
- return checkUserAbleToNext;
- } else {
- if (permissionCheck) {
- // 检查用户权限
- List getPermission = permissionDAO.getPermission(userId);
- // 匹配权限
- if (getPermission.contains(permissionName)) {
- return pjp.proceed();
- } else {
- log.info("\t> 用户权限不足,检查是否是管理员");
- // 检查用户是管理员
- RoleUserDO roleUserDO = roleDAO
- .getRoleUserByUid(Processing.getAuthHeaderToUserId(request));
- if (roleUserDO == null) {
- return ResultUtil.error(ErrorCode.NOT_ADMIN);
- }
- RoleDO roleDO = roleDAO.getRoleByRoleName("admin");
- if (roleUserDO.getRid().equals(roleDO.getId())) {
- return pjp.proceed();
- } else {
- return ResultUtil.error(ErrorCode.NOT_PERMISSION);
- }
- }
- } else {
- return pjp.proceed();
- }
- }
- } else {
- return ResultUtil.error(ErrorCode.TOKEN_NOT_EXIST);
- }
- }
-
- @Around("@annotation(com.jsl.oa.annotations.CheckUserAbleToUse)")
- public Object checkUserAbleToUse(ProceedingJoinPoint pjp) throws Throwable {
- log.info("检查用户是否有权限继续");
- // 获取 HttpServletRequest 对象
- HttpServletRequest request =
- ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes()))
- .getRequest();
-
- // 获取注解方法
- CheckUserAbleToUse check = getCheckUserAbleToUse(pjp);
- // 获取注解值
- assert check != null;
-
- // 获取用户信息
- Long userId = Processing.getAuthHeaderToUserId(request);
- UserDO userDO = userMapper.getUserById(userId);
- // 用户不存在
- if (userDO == null) {
- return ResultUtil.error(ErrorCode.USER_NOT_EXIST);
- }
- if (check.isCheckEnable()) {
- // 用户是否被禁用
- if (!userDO.getEnabled()) {
- return ResultUtil.error(ErrorCode.USER_DISABLED);
- }
- }
- if (check.isCheckLock()) {
- // 用户是否被封禁
- if (!userDO.getAccountNoLocked()) {
- return ResultUtil.error(ErrorCode.USER_LOCKED);
- }
- }
- if (check.isCheckDelete()) {
- // 用户是否被删除
- if (userDO.getIsDelete()) {
- return ResultUtil.error(ErrorCode.USER_ALREADY_DELETE);
- }
- }
- if (check.isCheckExpire()) {
- // 用户是否过期
- if (!userDO.getAccountNoExpired()) {
- return ResultUtil.error(ErrorCode.USER_EXPIRED);
- }
- }
- return pjp.proceed();
- }
-
- private @Nullable CheckUserHasPermission getCheckUserHasPermission(@NotNull ProceedingJoinPoint joinPoint) {
- // 获取方法对象
- MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
- Method method = methodSignature.getMethod();
-
- // 获取方法上的注解
- return (method != null) ? method.getAnnotation(CheckUserHasPermission.class) : null;
- }
-
- private @Nullable CheckUserAbleToUse getCheckUserAbleToUse(@NotNull ProceedingJoinPoint joinPoint) {
- // 获取方法对象
- MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
- Method method = methodSignature.getMethod();
-
- // 获取方法上的注解
- return (method != null) ? method.getAnnotation(CheckUserAbleToUse.class) : null;
- }
-
- private @Nullable BaseResponse checkUserAbleToNext(Long userId, @NotNull UserMapper userMapper) {
- log.info("\t> 检查用户是否有权限继续");
- // 获取用户信息
- UserDO userDO = userMapper.getUserById(userId);
- // 用户不存在
- if (userDO == null) {
- return ResultUtil.error(ErrorCode.USER_NOT_EXIST);
- }
- // 用户是否被禁用
- if (!userDO.getEnabled()) {
- return ResultUtil.error(ErrorCode.USER_DISABLED);
- }
- // 用户是否被封禁
- if (!userDO.getAccountNoLocked()) {
- return ResultUtil.error(ErrorCode.USER_LOCKED);
- }
- // 用户是否被删除
- if (userDO.getIsDelete()) {
- return ResultUtil.error(ErrorCode.USER_ALREADY_DELETE);
- }
- // 用户是否过期
- if (!userDO.getAccountNoExpired()) {
- return ResultUtil.error(ErrorCode.USER_EXPIRED);
- }
- return null;
- }
-}
diff --git a/src/main/java/com/jsl/oa/aspect/AuthControllerAspect.java b/src/main/java/com/jsl/oa/aspect/AuthControllerAspect.java
deleted file mode 100755
index c1d9fac..0000000
--- a/src/main/java/com/jsl/oa/aspect/AuthControllerAspect.java
+++ /dev/null
@@ -1,131 +0,0 @@
-package com.jsl.oa.aspect;
-
-import com.jsl.oa.common.constant.BusinessConstants;
-import com.jsl.oa.utils.ErrorCode;
-import com.jsl.oa.utils.ResultUtil;
-import com.jsl.oa.utils.redis.TokenRedisUtil;
-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.jetbrains.annotations.NotNull;
-import org.springframework.stereotype.Component;
-import org.springframework.web.context.request.RequestContextHolder;
-import org.springframework.web.context.request.ServletRequestAttributes;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.Objects;
-
-/**
- * 用户控制器切面
- *
- * 用于用户控制器的切面
- *
- * @author xiao_lfeng
- * @version v1.1.0
- * @since v1.0.0
- */
-@Slf4j
-@Aspect
-@Component
-@RequiredArgsConstructor
-public class AuthControllerAspect {
- private final TokenRedisUtil tokenRedisUtil;
-
- /**
- * 用户控制器切面
- *
- * 用于用户控制器的切面
- *
- * @param pjp ProceedingJoinPoint对象
- * @return {@link Object}
- * @throws Throwable 异常
- * @since v1.0.0
- */
- @Around("execution(* com.jsl.oa.controllers.*.*(..)) && !execution(* com.jsl.oa.controllers.IndexController.*(..))")
- public Object controllerAround(ProceedingJoinPoint pjp) throws Throwable {
- // 获取HttpServletRequest对象
- HttpServletRequest request =
- ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes()))
- .getRequest();
-
- // 时间戳检查
- if (checkTimestamp(request)) {
- // TODO: 2023/12/21 0001 后期固定业务(如:日志处理)
- return pjp.proceed();
- } else {
- return ResultUtil.error(ErrorCode.TIMESTAMP_ERROR);
- }
- }
-
- /**
- * Token检查切面
- *
- * 用于检查Token是否有效
- *
- * @param pjp ProceedingJoinPoint对象
- * @return {@link Object}
- * @throws Throwable 异常
- */
- @Around("execution(* com.jsl.oa.controllers.*.*(..)) "
- + "&& !execution(* com.jsl.oa.controllers.AuthController.authSendEmailCode(..))"
- + "&& !execution(* com.jsl.oa.controllers.AuthController.authLoginByEmail(..))"
- + "&& !execution(* com.jsl.oa.controllers.AuthController.authForgetPassword(..))"
- + "&& !execution(* com.jsl.oa.controllers.AuthController.authLogin(..))"
- + "&& !execution(* com.jsl.oa.controllers.AuthController.authRegister(..)) "
- + "&& !execution(* com.jsl.oa.controllers.IndexController.*(..)) "
- + "&& !execution(* com.jsl.oa.controllers.CustomController.*(..)) "
- + "&& !execution(* com.jsl.oa.controllers.InfoController.infoGetHeaderImage(..)) "
- + "&& !execution(* com.jsl.oa.controllers.InfoController.infoGetHeaderUser(..))"
- + "&& !execution(* com.jsl.oa.controllers.ProjectController.*(..))"
- + "&& !execution(* com.jsl.oa.controllers.TagController.*(..))")
- public Object tokenControllerAround(ProceedingJoinPoint pjp) throws Throwable {
- // 获取 HttpServletRequest 对象
- HttpServletRequest request =
- ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes()))
- .getRequest();
-
- // 检查 Token 是否有效
- String token = request.getHeader("Authorization");
- if (token != null && !token.isEmpty()) {
- // 获取 Redis 检查 Token 是否存在
- String finalToken = token.replace("Bearer ", "");
- for (String it : tokenRedisUtil.getList(BusinessConstants.BUSINESS_LOGIN)) {
- if (it.equals(finalToken)) {
- return pjp.proceed();
- }
- }
- }
- return ResultUtil.error(ErrorCode.TOKEN_NOT_EXIST);
- }
-
- /**
- * 时间戳检查
- *
- * 用于检查时间戳是否合法,合法时间范围正负5秒
- *
- * @param request HttpServletRequest对象
- * @return {@link Boolean}
- * @since v1.0.0
- */
- private @NotNull Boolean checkTimestamp(@NotNull HttpServletRequest request) {
- // 获取请求头中的时间戳
- String getTimestamp = request.getHeader("Timestamp");
- log.info("\t> 获取到的时间戳为 {} | 当前时间戳 {}", getTimestamp, System.currentTimeMillis());
- // 判断是否为空
- if (getTimestamp == null || getTimestamp.isEmpty()) {
- return false;
- } else {
- if (getTimestamp.length() == 10) {
- getTimestamp += "000";
- }
- }
- // 获取当前时间戳
- long nowTimestamp = System.currentTimeMillis();
-
- // 时间误差允许前后五秒钟
- return nowTimestamp - Long.parseLong(getTimestamp) <= 10000
- && nowTimestamp - Long.parseLong(getTimestamp) >= -10000;
- }
-}
diff --git a/src/main/java/com/jsl/oa/aspect/BusinessAop.java b/src/main/java/com/jsl/oa/aspect/BusinessAop.java
new file mode 100644
index 0000000..3772f4e
--- /dev/null
+++ b/src/main/java/com/jsl/oa/aspect/BusinessAop.java
@@ -0,0 +1,85 @@
+package com.jsl.oa.aspect;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.jetbrains.annotations.NotNull;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Arrays;
+
+/**
+ * 业务切面
+ *
+ * 对业务进行切入,进行对内容操作的预处理
+ *
+ * @since v1.2.0
+ * @version v1.2.0
+ * @author xiao_lfeng
+ */
+@Slf4j
+@Aspect
+@Component
+@RequiredArgsConstructor
+public class BusinessAop {
+
+ /**
+ * 在控制器的所有方法执行前执行
+ *
+ * @param joinPoint 切入点提供对方法执行的信息
+ */
+ @Before("execution(* com.jsl.oa.controllers.*.*(..))")
+ public void beforeController(@NotNull JoinPoint joinPoint) {
+ // 从ServletRequest中获取用户信息
+ ServletRequestAttributes servletRequestAttributes =
+ (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+
+ if (servletRequestAttributes != null) {
+ HttpServletRequest request = servletRequestAttributes.getRequest();
+ // 获取方法签名
+ MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
+ String methodName = methodSignature.getName();
+
+ log.info("[CONTROL] 执行 {} 接口 | 地址: [{}]{}", methodName, request.getMethod(), request.getServletPath());
+ } else {
+ throw new RuntimeException("无法获取信息");
+ }
+ }
+
+ /**
+ * 在服务的所有方法执行前执行
+ *
+ * @param joinPoint 切入点提供对方法执行的信息
+ */
+ @Before("execution(* com.jsl.oa.services.impl.*.*(..))")
+ public void beforeService(@NotNull JoinPoint joinPoint) {
+ // 获取方法签名
+ MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
+ String methodName = methodSignature.getName();
+
+ log.info("[SERVICE] 执行 {} 业务", methodName);
+ }
+
+ /**
+ * 在DAO的所有方法执行前执行
+ *
+ * @param joinPoint 切入点提供对方法执行的信息
+ */
+ @Before("execution(* com.jsl.oa.dao.*.*(..))")
+ public void beforeDao(@NotNull JoinPoint joinPoint) {
+ // 获取方法签名
+ MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
+ String methodName = methodSignature.getName();
+ Object[] args = joinPoint.getArgs();
+ log.info("[DAO] 操作 {} 记录", methodName);
+ if (args.length != 0) {
+ log.debug("\t> 传入信息:{}", Arrays.toString(args));
+ }
+ }
+}
diff --git a/src/main/java/com/jsl/oa/aspect/CheckUserAbleToUseAspect.java b/src/main/java/com/jsl/oa/aspect/CheckUserAbleToUseAspect.java
new file mode 100644
index 0000000..08e4989
--- /dev/null
+++ b/src/main/java/com/jsl/oa/aspect/CheckUserAbleToUseAspect.java
@@ -0,0 +1,75 @@
+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("无法获取信息");
+ }
+ }
+}
diff --git a/src/main/java/com/jsl/oa/aspect/CheckUserPermissionAspect.java b/src/main/java/com/jsl/oa/aspect/CheckUserPermissionAspect.java
new file mode 100644
index 0000000..c0daa7b
--- /dev/null
+++ b/src/main/java/com/jsl/oa/aspect/CheckUserPermissionAspect.java
@@ -0,0 +1,76 @@
+package com.jsl.oa.aspect;
+
+import com.jsl.oa.annotations.NeedRoleGroup;
+import com.jsl.oa.dao.RoleDAO;
+import com.jsl.oa.exception.library.NotLoginException;
+import com.jsl.oa.exception.library.PermissionDeniedException;
+import com.jsl.oa.model.dodata.RoleDO;
+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.aspectj.lang.reflect.MethodSignature;
+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 CheckUserPermissionAspect {
+
+ private final RoleDAO roleDAO;
+
+ /**
+ * 检查权限
+ *
+ * 检查注解中填写的权限,只有当接口符合注解中的权限信息,才会实际进入业务,否则将会被拦截
+ *
+ * @param pjp {@link ProceedingJoinPoint}
+ * @return {@link Object}
+ */
+ @Around("@annotation(com.jsl.oa.annotations.NeedRoleGroup)")
+ public Object checkPermission(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("用户信息不存在");
+ }
+ // 获取方法签名
+ MethodSignature signature = (MethodSignature) pjp.getSignature();
+ NeedRoleGroup checkAccountPermission = signature.getMethod().getAnnotation(NeedRoleGroup.class);
+ String getRoleAtAnnotation = checkAccountPermission.value();
+
+ // 获取用户所在权限组
+ RoleDO getUserRole = roleDAO.getRoleNameByUid(getUserId);
+ if (getUserRole != null) {
+ if (getUserRole.getRoleName().equals(getRoleAtAnnotation)) {
+ return pjp.proceed();
+ } else {
+ throw new PermissionDeniedException("用户组不匹配", getRoleAtAnnotation);
+ }
+ } else {
+ throw new PermissionDeniedException("用户组不匹配", getRoleAtAnnotation);
+ }
+ } else {
+ throw new RuntimeException("无法获取信息");
+ }
+ }
+}
diff --git a/src/main/java/com/jsl/oa/config/filter/TimestampFilter.java b/src/main/java/com/jsl/oa/config/filter/TimestampFilter.java
new file mode 100644
index 0000000..4bcb93e
--- /dev/null
+++ b/src/main/java/com/jsl/oa/config/filter/TimestampFilter.java
@@ -0,0 +1,65 @@
+package com.jsl.oa.config.filter;
+
+import com.google.gson.Gson;
+import com.jsl.oa.utils.ErrorCode;
+import com.jsl.oa.utils.ResultUtil;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * 时间戳过滤器
+ *
+ * 对前端发送的时间戳进行检查,当检查通过后将会进入通过过滤器,若检查不通过将会被当前拦截器拦截并返回 {@link ErrorCode} 内的 TIMESTAMP_ERROR
+ * 信息。另外,该过滤器仅对 OPTION 请求不进行时间戳检查,其他请求都将会检查处理。
+ *
+ * @since v1.2.0
+ * @version v1.2.0
+ * @author xiao_lfeng
+ */
+@Slf4j
+public class TimestampFilter implements Filter {
+ private final Gson gson = new Gson();
+
+ @Override
+ public void doFilter(
+ ServletRequest request,
+ ServletResponse response,
+ FilterChain chain
+ ) throws IOException, ServletException {
+ HttpServletRequest req = (HttpServletRequest) request;
+ HttpServletResponse res = (HttpServletResponse) response;
+
+ res.setContentType("application/json;charset=UTF-8");
+ // 获取当前时间戳
+ long nowTimestamp = System.currentTimeMillis();
+ if (!req.getMethod().equals("OPTIONS")) {
+ String getTimestamp = req.getHeader("Timestamp");
+ log.info("[FILTER] 获取到的时间戳为 {} | 当前时间戳 {}", getTimestamp, nowTimestamp);
+ if (getTimestamp == null || getTimestamp.isEmpty()) {
+ res.setStatus(200);
+ res.getWriter().write(gson.toJson(ResultUtil.error(ErrorCode.TIMESTAMP_ERROR)));
+ } else {
+ // 秒与毫秒转换
+ if (getTimestamp.length() == 10) {
+ getTimestamp += "000";
+ }
+ // 时间误差允许前后五秒钟
+ if (nowTimestamp - Long.parseLong(getTimestamp) <= 10000
+ && nowTimestamp - Long.parseLong(getTimestamp) >= -10000) {
+ chain.doFilter(req, res);
+ } else {
+ res.setStatus(200);
+ res.getWriter().write(gson.toJson(ResultUtil.error(ErrorCode.TIMESTAMP_ERROR)));
+ }
+ }
+ } else {
+ log.info("[FILTER] 预执行请求[OPTION],不进行时间戳检查");
+ res.setStatus(200);
+ res.getWriter().write(gson.toJson(ResultUtil.success("Option成功")));
+ }
+ }
+}
diff --git a/src/main/java/com/jsl/oa/config/shiro/ShiroConfiguration.java b/src/main/java/com/jsl/oa/config/shiro/ShiroConfiguration.java
index 3a11cb0..98d2ef8 100755
--- a/src/main/java/com/jsl/oa/config/shiro/ShiroConfiguration.java
+++ b/src/main/java/com/jsl/oa/config/shiro/ShiroConfiguration.java
@@ -2,6 +2,7 @@ package com.jsl.oa.config.shiro;
import com.jsl.oa.config.filter.CorsFilter;
import com.jsl.oa.config.filter.JwtFilter;
+import com.jsl.oa.config.filter.TimestampFilter;
import lombok.RequiredArgsConstructor;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
@@ -46,8 +47,13 @@ public class ShiroConfiguration {
// 添加JWT过滤器
Map filters = new LinkedHashMap<>();
- filters.put("authc", new JwtFilter()); // 配置自定义的JWT过滤器
- filters.put("anon", new CorsFilter()); // 配置自定义的CORS过滤器
+ // 配置自定义的JWT过滤器
+ filters.put("authc", new JwtFilter());
+ // 配置自定义的CORS过滤器
+ filters.put("anon", new CorsFilter());
+ // 配置自定义的时间戳检查
+ filters.put("time", new TimestampFilter());
+
shiroFilterFactoryBean.setFilters(filters);
return shiroFilterFactoryBean;
}
@@ -86,7 +92,7 @@ public class ShiroConfiguration {
@NotNull
private static Map setFilterChain() {
Map filterChainDefinitionMap = new LinkedHashMap<>();
- filterChainDefinitionMap.put("/auth/**/**", "anon");
+ filterChainDefinitionMap.put("/auth/**/**", "anon, time");
filterChainDefinitionMap.put("/unauthorized", "anon");
filterChainDefinitionMap.put("/", "anon");
filterChainDefinitionMap.put("/info/header-image/get", "anon");
@@ -98,7 +104,7 @@ public class ShiroConfiguration {
filterChainDefinitionMap.put("/project/work/add", "anon");
filterChainDefinitionMap.put("/tags/project/list", "anon");
filterChainDefinitionMap.put("/module/add", "anon");
- filterChainDefinitionMap.put("/**/**", "authc");
+ filterChainDefinitionMap.put("/**/**", "authc, time");
return filterChainDefinitionMap;
}
diff --git a/src/main/java/com/jsl/oa/exception/library/NotLoginException.java b/src/main/java/com/jsl/oa/exception/library/NotLoginException.java
new file mode 100644
index 0000000..f1d95af
--- /dev/null
+++ b/src/main/java/com/jsl/oa/exception/library/NotLoginException.java
@@ -0,0 +1,16 @@
+package com.jsl.oa.exception.library;
+
+/**
+ * 自定义异常类
+ *
+ * 用于表示用户未登录的情况。
+ *
+ * @since v1.2.0
+ * @version v1.2.0
+ * @author xiao_lfeng
+ */
+public class NotLoginException extends RuntimeException {
+ public NotLoginException(String message) {
+ super(message);
+ }
+}
diff --git a/src/main/java/com/jsl/oa/exception/library/PermissionDeniedException.java b/src/main/java/com/jsl/oa/exception/library/PermissionDeniedException.java
new file mode 100644
index 0000000..a76cb73
--- /dev/null
+++ b/src/main/java/com/jsl/oa/exception/library/PermissionDeniedException.java
@@ -0,0 +1,22 @@
+package com.jsl.oa.exception.library;
+
+import lombok.Getter;
+
+/**
+ * 自定义异常类
+ *
+ * 用于权限拒绝的情况
+ *
+ * @since v1.2.0
+ * @version v1.2.0
+ * @author xiao_lfeng
+ */
+@Getter
+public class PermissionDeniedException extends RuntimeException {
+ private final String needGroup;
+
+ public PermissionDeniedException(String message, String needGroup) {
+ super(message);
+ this.needGroup = needGroup;
+ }
+}
diff --git a/src/main/java/com/jsl/oa/exception/library/UserCanntUse.java b/src/main/java/com/jsl/oa/exception/library/UserCanntUse.java
new file mode 100644
index 0000000..987f796
--- /dev/null
+++ b/src/main/java/com/jsl/oa/exception/library/UserCanntUse.java
@@ -0,0 +1,16 @@
+package com.jsl.oa.exception.library;
+
+/**
+ * 自定义异常类
+ *
+ * 用于反馈用户被禁止使用的情况
+ *
+ * @since v1.2.0
+ * @version v1.2.0
+ * @author xiao_lfeng
+ */
+public class UserCanntUse extends RuntimeException {
+ public UserCanntUse(String message) {
+ super(message);
+ }
+}
diff --git a/src/main/java/com/jsl/oa/services/impl/AuthServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/AuthServiceImpl.java
index 600ce2d..9784c60 100755
--- a/src/main/java/com/jsl/oa/services/impl/AuthServiceImpl.java
+++ b/src/main/java/com/jsl/oa/services/impl/AuthServiceImpl.java
@@ -1,10 +1,9 @@
package com.jsl.oa.services.impl;
-import com.jsl.oa.annotations.CheckUserAbleToUse;
+import com.jsl.oa.annotations.UserAbleToUse;
import com.jsl.oa.common.constant.BusinessConstants;
import com.jsl.oa.dao.PermissionDAO;
import com.jsl.oa.dao.RoleDAO;
-import com.jsl.oa.mapper.RoleMapper;
import com.jsl.oa.mapper.UserMapper;
import com.jsl.oa.model.dodata.RoleDO;
import com.jsl.oa.model.dodata.RoleUserDO;
@@ -41,7 +40,6 @@ import java.util.regex.Pattern;
@RequiredArgsConstructor
public class AuthServiceImpl implements AuthService {
private final UserMapper userMapper;
- private final RoleMapper roleMapper;
private final RoleDAO roleDAO;
private final PermissionDAO permissionDAO;
@@ -178,7 +176,7 @@ public class AuthServiceImpl implements AuthService {
}
@Override
- @CheckUserAbleToUse
+ @UserAbleToUse
public BaseResponse authChangePassword(
@NotNull UserChangePasswordVO userChangePasswordVO,
HttpServletRequest request
@@ -212,7 +210,7 @@ public class AuthServiceImpl implements AuthService {
}
@Override
- @CheckUserAbleToUse
+ @UserAbleToUse
public BaseResponse authLogout(HttpServletRequest request) {
log.info("\t> 执行 Service 层 AuthService.authLogout 方法");
// 获取用户
diff --git a/src/main/java/com/jsl/oa/services/impl/InfoServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/InfoServiceImpl.java
index f0c70a2..517d3e6 100644
--- a/src/main/java/com/jsl/oa/services/impl/InfoServiceImpl.java
+++ b/src/main/java/com/jsl/oa/services/impl/InfoServiceImpl.java
@@ -1,6 +1,6 @@
package com.jsl.oa.services.impl;
-import com.jsl.oa.annotations.CheckUserHasPermission;
+import com.jsl.oa.annotations.NeedRoleGroup;
import com.jsl.oa.dao.InfoDAO;
import com.jsl.oa.dao.RoleDAO;
import com.jsl.oa.dao.UserDAO;
@@ -41,7 +41,7 @@ public class InfoServiceImpl implements InfoService {
private final RoleDAO roleDAO;
@Override
- @CheckUserHasPermission("info.image.add")
+ @NeedRoleGroup("info.image.add")
public BaseResponse addHeaderImage(HttpServletRequest request, @NotNull CarouselVO carouselVO) {
log.info("\t> 执行 Service 层 InfoService.addHeaderImage 方法");
// 获取用户
@@ -75,7 +75,7 @@ public class InfoServiceImpl implements InfoService {
}
@Override
- @CheckUserHasPermission("info.image.edit")
+ @NeedRoleGroup("info.image.edit")
public BaseResponse editHeaderImage(HttpServletRequest request, @NotNull CarouselVO carouselVO) {
log.info("\t> 执行 Service 层 InfoService.editHeaderImage 方法");
// 获取用户
@@ -127,7 +127,7 @@ public class InfoServiceImpl implements InfoService {
}
@Override
- @CheckUserHasPermission("info.image.del")
+ @NeedRoleGroup("info.image.del")
public BaseResponse delHeaderImage(HttpServletRequest request, Integer id) {
log.info("\t> 执行 Service 层 InfoService.delHeaderImage 方法");
// 用户权限校验
@@ -150,7 +150,7 @@ public class InfoServiceImpl implements InfoService {
}
@Override
- @CheckUserHasPermission("info.image.setting.edit")
+ @NeedRoleGroup("info.image.setting.edit")
public BaseResponse editSettingHeaderImage(HttpServletRequest request, Boolean showType) {
log.info("\t> 执行 Service 层 InfoService.editSettingHeaderImage 方法");
// 用户权限校验
diff --git a/src/main/java/com/jsl/oa/services/impl/MailServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/MailServiceImpl.java
index 9a3380e..2ea7e95 100755
--- a/src/main/java/com/jsl/oa/services/impl/MailServiceImpl.java
+++ b/src/main/java/com/jsl/oa/services/impl/MailServiceImpl.java
@@ -1,6 +1,6 @@
package com.jsl.oa.services.impl;
-import com.jsl.oa.annotations.CheckUserAbleToUse;
+import com.jsl.oa.annotations.UserAbleToUse;
import com.jsl.oa.services.MailService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -39,7 +39,7 @@ public class MailServiceImpl implements MailService {
@Override
@Async
- @CheckUserAbleToUse
+ @UserAbleToUse
public void sendMail(String sendTo, String subject, String text) {
log.info("\t> 执行 Service 层 MailService.sendMail 方法");
//发送多媒体邮件
@@ -63,14 +63,14 @@ public class MailServiceImpl implements MailService {
@Override
@Async
- @CheckUserAbleToUse
+ @UserAbleToUse
public void sendMail(String sendTo, String model) {
log.info("\t> 执行 Service 层 MailService.sendMail 方法");
}
@Override
@Async
- @CheckUserAbleToUse
+ @UserAbleToUse
public void sendMailAboutUserLogin(String email, Integer code) {
log.info("\t> 执行 Service 层 MailService.sendMailAboutUserLogin 方法");
// 发送邮件带HTML模块部分
diff --git a/src/main/java/com/jsl/oa/services/impl/MessageServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/MessageServiceImpl.java
index d774276..042ec62 100644
--- a/src/main/java/com/jsl/oa/services/impl/MessageServiceImpl.java
+++ b/src/main/java/com/jsl/oa/services/impl/MessageServiceImpl.java
@@ -1,5 +1,6 @@
package com.jsl.oa.services.impl;
-import com.jsl.oa.annotations.CheckUserAbleToUse;
+
+import com.jsl.oa.annotations.UserAbleToUse;
import com.jsl.oa.dao.UserDAO;
import com.jsl.oa.mapper.MessageMapper;
import com.jsl.oa.mapper.ProjectMapper;
@@ -13,6 +14,7 @@ import com.jsl.oa.utils.*;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
+
import javax.servlet.http.HttpServletRequest;
import java.time.LocalDateTime;
import java.util.ArrayList;
@@ -37,7 +39,7 @@ public class MessageServiceImpl implements MessageService {
private final ProjectMapper projectMapper;
@Override
- @CheckUserAbleToUse
+ @UserAbleToUse
public BaseResponse messageDelete(Long mid, HttpServletRequest request) {
//获取消息数据
MessageDO messageDO = messageMapper.getMessageById(mid);
@@ -55,7 +57,7 @@ public class MessageServiceImpl implements MessageService {
@SuppressWarnings("checkstyle:Regexp")
@Override
- @CheckUserAbleToUse
+ @UserAbleToUse
public BaseResponse messageGet(LocalDateTime beginTime,
LocalDateTime endTime,
Integer page,
@@ -90,11 +92,11 @@ public class MessageServiceImpl implements MessageService {
/**
* 添加指派消息
*
- * @param pId 项目id
+ * @param pId 项目id
* @param systemId 系统id
* @param moddleId 模块id
- * @param uid 用户id
- * @param request
+ * @param uid 用户id
+ * @param request 请求
*/
@Override
public void messageAdd(
@@ -129,12 +131,12 @@ public class MessageServiceImpl implements MessageService {
/**
* 添加审批消息
*
- * @param pId 项目id
+ * @param pId 项目id
* @param systemId 系统id
* @param moddleId 模块id
- * @param uid 用户id
- * @param isPass 是否通过 1:通过 0:未通过
- * @param request
+ * @param uid 用户id
+ * @param isPass 是否通过 1:通过 0:未通过
+ * @param request 请求
*/
@Override
public void messageAdd(
@@ -163,10 +165,11 @@ public class MessageServiceImpl implements MessageService {
/**
* 添加项目变动消息
- * @param pId 项目id
- * @param type 类型 1:上传文档 2:修改状态 3:修改负责人
+ *
+ * @param pId 项目id
+ * @param type 类型 1:上传文档 2:修改状态 3:修改负责人
* @param systemId 系统id
- * @param request
+ * @param request 请求
*/
@Override
public void messageAdd(
@@ -201,11 +204,11 @@ public class MessageServiceImpl implements MessageService {
/**
* 添加子系统变动消息
*
- * @param pId 项目id
+ * @param pId 项目id
* @param systmeId 系统id
* @param moddleId 模块id
- * @param type 类型 1:删除模块 2:修改简介 3:修改周期
- * @param request
+ * @param type 类型 1:删除模块 2:修改简介 3:修改周期
+ * @param request 请求
*/
@Override
public void messageAdd(
@@ -238,8 +241,8 @@ public class MessageServiceImpl implements MessageService {
messageAddVO.setText("项目经理" + senderName + "修改了" + projectName + "项目的"
+ systemName + "系统的简介说明");
} else if (type == 3) {
- messageAddVO.setText("项目经理" + senderName + "修改了" + projectName + "项目的"
- + systemName + "系统的系统周期/工作量");
+ messageAddVO.setText("项目经理" + senderName + "修改了" + projectName + "项目的"
+ + systemName + "系统的系统周期/工作量");
}
messageAddVO.setType("跳转系统页");
messageAddVO.setToId(systmeId);
@@ -323,8 +326,8 @@ public class MessageServiceImpl implements MessageService {
String systemName = projectMapper.getWorkById(projectWorkDO.getProjectChildId().intValue()).getName();
String moddleName = projectWorkDO.getName();
messageAddVO.setText("您负责的" + projectName + "项目的" + systemName + "系统的" + moddleName + "模块"
- + "还有三天就要到期了,请及时处理");
- messageAddVO.setType("跳转模块页");
+ + "还有三天就要到期了,请及时处理");
+ messageAddVO.setType("跳转模块页");
messageAddVO.setToId(projectWorkDO.getId().intValue());
messageMapper.messageAdd(messageAddVO);
}
diff --git a/src/main/java/com/jsl/oa/services/impl/NewsServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/NewsServiceImpl.java
index 6b231eb..2db150a 100644
--- a/src/main/java/com/jsl/oa/services/impl/NewsServiceImpl.java
+++ b/src/main/java/com/jsl/oa/services/impl/NewsServiceImpl.java
@@ -1,7 +1,7 @@
package com.jsl.oa.services.impl;
-import com.jsl.oa.annotations.CheckUserHasPermission;
+import com.jsl.oa.annotations.NeedRoleGroup;
import com.jsl.oa.dao.NewsDAO;
import com.jsl.oa.model.dodata.NewsDO;
import com.jsl.oa.model.vodata.NewsAddVO;
@@ -35,7 +35,7 @@ public class NewsServiceImpl implements NewsService {
private final NewsDAO newsDAO;
@Override
- @CheckUserHasPermission("news.add")
+ @NeedRoleGroup("news.add")
public BaseResponse newsAdd(NewsAddVO newsAddVO, @NotNull HttpServletRequest request) {
log.info("\t> 执行 Service 层 NewsService.newsAdd 方法");
// 拷贝新闻数据到实体类
diff --git a/src/main/java/com/jsl/oa/services/impl/PermissionServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/PermissionServiceImpl.java
index 657dee5..92c8370 100644
--- a/src/main/java/com/jsl/oa/services/impl/PermissionServiceImpl.java
+++ b/src/main/java/com/jsl/oa/services/impl/PermissionServiceImpl.java
@@ -1,6 +1,6 @@
package com.jsl.oa.services.impl;
-import com.jsl.oa.annotations.CheckUserHasPermission;
+import com.jsl.oa.annotations.NeedRoleGroup;
import com.jsl.oa.dao.PermissionDAO;
import com.jsl.oa.dao.RoleDAO;
import com.jsl.oa.dao.UserDAO;
@@ -41,7 +41,7 @@ public class PermissionServiceImpl implements PermissionService {
private final UserDAO userDAO;
@Override
- @CheckUserHasPermission("permission.add")
+ @NeedRoleGroup("permission.add")
public BaseResponse permissionAdd(HttpServletRequest request, Long rid, Long pid) {
log.info("\t> 执行 Service 层 PermissionService.permissionAdd 方法");
permissionMapper.permissionAdd(rid, pid);
@@ -49,7 +49,7 @@ public class PermissionServiceImpl implements PermissionService {
}
@Override
- @CheckUserHasPermission("permission.user")
+ @NeedRoleGroup("permission.user")
public BaseResponse permissionUser(HttpServletRequest request, Long uid) {
log.info("\t> 执行 Service 层 PermissionService.permissionUserPid 方法");
if (userDAO.isExistUser(uid)) {
@@ -70,7 +70,7 @@ public class PermissionServiceImpl implements PermissionService {
@Override
- @CheckUserHasPermission("permission.get")
+ @NeedRoleGroup("permission.get")
public BaseResponse permissionGet(HttpServletRequest request) {
log.info("\t> 执行 Service 层 PermissionService.permissionGet 方法");
//获取所有权限数据
@@ -82,7 +82,7 @@ public class PermissionServiceImpl implements PermissionService {
}
@Override
- @CheckUserHasPermission("permission.edit")
+ @NeedRoleGroup("permission.edit")
public BaseResponse permissionEdit(PermissionEditVO permissionEditVo, HttpServletRequest request) {
log.info("\t> 执行 Service 层 PermissionService.permissionEdit 方法");
//根据id获取对应permission数据
@@ -100,7 +100,7 @@ public class PermissionServiceImpl implements PermissionService {
}
@Override
- @CheckUserHasPermission("permission.delete")
+ @NeedRoleGroup("permission.delete")
public BaseResponse permissionDelete(HttpServletRequest request, Long pid) {
log.info("\t> 执行 Service 层 PermissionService.permissionDelete 方法");
//删除权限
diff --git a/src/main/java/com/jsl/oa/services/impl/ProjectServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/ProjectServiceImpl.java
index 0f0697c..dad777b 100644
--- a/src/main/java/com/jsl/oa/services/impl/ProjectServiceImpl.java
+++ b/src/main/java/com/jsl/oa/services/impl/ProjectServiceImpl.java
@@ -3,7 +3,7 @@ package com.jsl.oa.services.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
-import com.jsl.oa.annotations.CheckUserHasPermission;
+import com.jsl.oa.annotations.NeedRoleGroup;
import com.jsl.oa.dao.ProjectDAO;
import com.jsl.oa.dao.RoleDAO;
import com.jsl.oa.dao.UserDAO;
@@ -236,7 +236,7 @@ public class ProjectServiceImpl implements ProjectService {
}
@Override
- @CheckUserHasPermission("info.project.add")
+ @NeedRoleGroup("info.project.add")
public BaseResponse addHeader(HttpServletRequest request, ProjectShowVO projectShowVO) {
log.info("\t> 执行 Service 层 InfoService.addHeader 方法");
// 获取用户
@@ -263,7 +263,7 @@ public class ProjectServiceImpl implements ProjectService {
}
@Override
- @CheckUserHasPermission("info.project.del")
+ @NeedRoleGroup("info.project.del")
public BaseResponse delHeader(Integer id, HttpServletRequest request) {
log.info("\t> 执行 Service 层 InfoService.delHeader 方法");
// 获取展示信息
@@ -282,7 +282,7 @@ public class ProjectServiceImpl implements ProjectService {
}
@Override
- @CheckUserHasPermission("info.project.edit")
+ @NeedRoleGroup("info.project.edit")
public BaseResponse editHeader(HttpServletRequest request, ProjectShowVO projectShowVO, Integer id) {
log.info("\t> 执行 Service 层 InfoService.editHeader 方法");
// 获取用户
diff --git a/src/main/java/com/jsl/oa/services/impl/RoleServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/RoleServiceImpl.java
index 41be8e8..f6b6e39 100644
--- a/src/main/java/com/jsl/oa/services/impl/RoleServiceImpl.java
+++ b/src/main/java/com/jsl/oa/services/impl/RoleServiceImpl.java
@@ -1,6 +1,6 @@
package com.jsl.oa.services.impl;
-import com.jsl.oa.annotations.CheckUserHasPermission;
+import com.jsl.oa.annotations.NeedRoleGroup;
import com.jsl.oa.dao.RoleDAO;
import com.jsl.oa.dao.UserDAO;
import com.jsl.oa.exception.ClassCopyException;
@@ -42,7 +42,7 @@ public class RoleServiceImpl implements RoleService {
private final UserDAO userDAO;
@Override
- @CheckUserHasPermission("role.add")
+ @NeedRoleGroup("role.add")
public BaseResponse roleAddUser(HttpServletRequest request, Long uid, Long rid) {
log.info("\t> 执行 Service 层 RoleService.addRoleUser 方法");
if (Processing.checkUserIsAdmin(request, roleDAO)) {
diff --git a/src/main/java/com/jsl/oa/services/impl/UserServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/UserServiceImpl.java
index d8ae754..df3f19b 100755
--- a/src/main/java/com/jsl/oa/services/impl/UserServiceImpl.java
+++ b/src/main/java/com/jsl/oa/services/impl/UserServiceImpl.java
@@ -1,7 +1,7 @@
package com.jsl.oa.services.impl;
-import com.jsl.oa.annotations.CheckUserAbleToUse;
-import com.jsl.oa.annotations.CheckUserHasPermission;
+import com.jsl.oa.annotations.NeedRoleGroup;
+import com.jsl.oa.annotations.UserAbleToUse;
import com.jsl.oa.dao.PermissionDAO;
import com.jsl.oa.dao.RoleDAO;
import com.jsl.oa.dao.UserDAO;
@@ -97,7 +97,7 @@ public class UserServiceImpl implements UserService {
}
@Override
- @CheckUserHasPermission("user.current.all")
+ @NeedRoleGroup("user.current.all")
public BaseResponse userCurrentAll(HttpServletRequest request, @NotNull UserAllCurrentVO userAllCurrentVO) {
log.info("\t> 执行 Service 层 UserService.userCurrentAll 方法");
// 检查数据
@@ -133,7 +133,7 @@ public class UserServiceImpl implements UserService {
@SuppressWarnings("checkstyle:NestedIfDepth")
@Override
- @CheckUserAbleToUse
+ @UserAbleToUse
public BaseResponse userCurrent(HttpServletRequest request,
String id,
String username,
diff --git a/src/main/java/com/jsl/oa/utils/BaseResponse.java b/src/main/java/com/jsl/oa/utils/BaseResponse.java
index d0f1cac..9d8a87b 100755
--- a/src/main/java/com/jsl/oa/utils/BaseResponse.java
+++ b/src/main/java/com/jsl/oa/utils/BaseResponse.java
@@ -18,6 +18,6 @@ public class BaseResponse {
this.code = code;
this.message = message;
this.data = data;
- log.info("==================================================");
+ log.info("============================================================");
}
}
diff --git a/src/main/java/com/jsl/oa/utils/ResultUtil.java b/src/main/java/com/jsl/oa/utils/ResultUtil.java
index e50c690..d421197 100755
--- a/src/main/java/com/jsl/oa/utils/ResultUtil.java
+++ b/src/main/java/com/jsl/oa/utils/ResultUtil.java
@@ -20,7 +20,6 @@ public class ResultUtil {
public static @NotNull BaseResponse success() {
log.info("成功: Success[200] 操作成功 - 不带数据");
- log.info("==================================================");
return new BaseResponse("Success", 200, "操作成功", null);
}