diff --git a/src/main/java/com/ruoyi/project/shiro/common/UserConstants.java b/src/main/java/com/ruoyi/project/shiro/common/Constants.java
similarity index 61%
rename from src/main/java/com/ruoyi/project/shiro/common/UserConstants.java
rename to src/main/java/com/ruoyi/project/shiro/common/Constants.java
index f2db5aecf..306a1ed68 100644
--- a/src/main/java/com/ruoyi/project/shiro/common/UserConstants.java
+++ b/src/main/java/com/ruoyi/project/shiro/common/Constants.java
@@ -5,13 +5,19 @@ package com.ruoyi.project.shiro.common;
*
* @author yangzz
*/
-public class UserConstants
+public class Constants
{
- /** 正常状态 */
- public static final String NORMAL = "0";
+ /** 用户正常状态 */
+ public static final String USER_NORMAL = "0";
- /** 封禁状态 */
- public static final String BLOCKED = "1";
+ /** 用户封禁状态 */
+ public static final String USER_BLOCKED = "1";
+
+ /** 角色正常状态 */
+ public static final String ROLE_NORMAL = "0";
+
+ /** 角色封禁状态 */
+ public static final String ROLE_BLOCKED = "1";
/** 异常状态 */
public static final String EXCEPTION = "1";
diff --git a/src/main/java/com/ruoyi/project/shiro/exception/JCaptchaException.java b/src/main/java/com/ruoyi/project/shiro/exception/JCaptchaException.java
index c79ac2b25..e82fd7b5b 100644
--- a/src/main/java/com/ruoyi/project/shiro/exception/JCaptchaException.java
+++ b/src/main/java/com/ruoyi/project/shiro/exception/JCaptchaException.java
@@ -1,5 +1,7 @@
package com.ruoyi.project.shiro.exception;
+import com.ruoyi.project.shiro.exception.user.UserException;
+
/**
* 验证码错误异常类
*
diff --git a/src/main/java/com/ruoyi/project/shiro/exception/RoleBlockedException.java b/src/main/java/com/ruoyi/project/shiro/exception/user/RoleBlockedException.java
similarity index 81%
rename from src/main/java/com/ruoyi/project/shiro/exception/RoleBlockedException.java
rename to src/main/java/com/ruoyi/project/shiro/exception/user/RoleBlockedException.java
index a7d2ab56c..442685749 100644
--- a/src/main/java/com/ruoyi/project/shiro/exception/RoleBlockedException.java
+++ b/src/main/java/com/ruoyi/project/shiro/exception/user/RoleBlockedException.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.shiro.exception;
+package com.ruoyi.project.shiro.exception.user;
/**
* 角色锁定异常类
diff --git a/src/main/java/com/ruoyi/project/shiro/exception/UserBlockedException.java b/src/main/java/com/ruoyi/project/shiro/exception/user/UserBlockedException.java
similarity index 81%
rename from src/main/java/com/ruoyi/project/shiro/exception/UserBlockedException.java
rename to src/main/java/com/ruoyi/project/shiro/exception/user/UserBlockedException.java
index 0011a8787..4f1751dd4 100644
--- a/src/main/java/com/ruoyi/project/shiro/exception/UserBlockedException.java
+++ b/src/main/java/com/ruoyi/project/shiro/exception/user/UserBlockedException.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.shiro.exception;
+package com.ruoyi.project.shiro.exception.user;
/**
* 用户锁定异常类
diff --git a/src/main/java/com/ruoyi/project/shiro/exception/UserException.java b/src/main/java/com/ruoyi/project/shiro/exception/user/UserException.java
similarity index 83%
rename from src/main/java/com/ruoyi/project/shiro/exception/UserException.java
rename to src/main/java/com/ruoyi/project/shiro/exception/user/UserException.java
index 85e5ca8cc..91450000f 100644
--- a/src/main/java/com/ruoyi/project/shiro/exception/UserException.java
+++ b/src/main/java/com/ruoyi/project/shiro/exception/user/UserException.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.shiro.exception;
+package com.ruoyi.project.shiro.exception.user;
import com.ruoyi.project.shiro.exception.base.BaseException;
diff --git a/src/main/java/com/ruoyi/project/shiro/exception/UserNotExistsException.java b/src/main/java/com/ruoyi/project/shiro/exception/user/UserNotExistsException.java
similarity index 80%
rename from src/main/java/com/ruoyi/project/shiro/exception/UserNotExistsException.java
rename to src/main/java/com/ruoyi/project/shiro/exception/user/UserNotExistsException.java
index 3c8520ed0..4c4d1747c 100644
--- a/src/main/java/com/ruoyi/project/shiro/exception/UserNotExistsException.java
+++ b/src/main/java/com/ruoyi/project/shiro/exception/user/UserNotExistsException.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.shiro.exception;
+package com.ruoyi.project.shiro.exception.user;
/**
* 用户不存在异常类
diff --git a/src/main/java/com/ruoyi/project/shiro/exception/UserPasswordNotMatchException.java b/src/main/java/com/ruoyi/project/shiro/exception/user/UserPasswordNotMatchException.java
similarity index 82%
rename from src/main/java/com/ruoyi/project/shiro/exception/UserPasswordNotMatchException.java
rename to src/main/java/com/ruoyi/project/shiro/exception/user/UserPasswordNotMatchException.java
index 159b92cbc..fae005dc0 100644
--- a/src/main/java/com/ruoyi/project/shiro/exception/UserPasswordNotMatchException.java
+++ b/src/main/java/com/ruoyi/project/shiro/exception/user/UserPasswordNotMatchException.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.shiro.exception;
+package com.ruoyi.project.shiro.exception.user;
/**
* 用户密码不正确或不符合规范异常类
diff --git a/src/main/java/com/ruoyi/project/shiro/exception/user/UserPasswordRetryLimitCountException.java b/src/main/java/com/ruoyi/project/shiro/exception/user/UserPasswordRetryLimitCountException.java
new file mode 100644
index 000000000..86efe08dc
--- /dev/null
+++ b/src/main/java/com/ruoyi/project/shiro/exception/user/UserPasswordRetryLimitCountException.java
@@ -0,0 +1,16 @@
+package com.ruoyi.project.shiro.exception.user;
+
+/**
+ * 用户错误记数异常类
+ *
+ * @author yangzz
+ */
+public class UserPasswordRetryLimitCountException extends UserException
+{
+ private static final long serialVersionUID = 1L;
+
+ public UserPasswordRetryLimitCountException(int retryLimitCount, String password)
+ {
+ super("user.password.retry.limit.count", new Object[] { retryLimitCount, password });
+ }
+}
diff --git a/src/main/java/com/ruoyi/project/shiro/exception/UserPasswordRetryLimitExceedException.java b/src/main/java/com/ruoyi/project/shiro/exception/user/UserPasswordRetryLimitExceedException.java
similarity index 76%
rename from src/main/java/com/ruoyi/project/shiro/exception/UserPasswordRetryLimitExceedException.java
rename to src/main/java/com/ruoyi/project/shiro/exception/user/UserPasswordRetryLimitExceedException.java
index 06922f9c3..21bf4dd33 100644
--- a/src/main/java/com/ruoyi/project/shiro/exception/UserPasswordRetryLimitExceedException.java
+++ b/src/main/java/com/ruoyi/project/shiro/exception/user/UserPasswordRetryLimitExceedException.java
@@ -1,7 +1,7 @@
-package com.ruoyi.project.shiro.exception;
+package com.ruoyi.project.shiro.exception.user;
/**
- * 用户错误次数异常类
+ * 用户错误最大次数异常类
*
* @author yangzz
*/
diff --git a/src/main/java/com/ruoyi/project/shiro/realm/LoginService.java b/src/main/java/com/ruoyi/project/shiro/realm/LoginService.java
index bfb41c33d..2ba80c026 100644
--- a/src/main/java/com/ruoyi/project/shiro/realm/LoginService.java
+++ b/src/main/java/com/ruoyi/project/shiro/realm/LoginService.java
@@ -3,12 +3,14 @@ package com.ruoyi.project.shiro.realm;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
+
import com.ruoyi.framework.constant.CommonConstant;
-import com.ruoyi.project.shiro.common.UserConstants;
+import com.ruoyi.project.shiro.common.Constants;
import com.ruoyi.project.shiro.common.utils.MessageUtils;
-import com.ruoyi.project.shiro.exception.UserBlockedException;
-import com.ruoyi.project.shiro.exception.UserNotExistsException;
-import com.ruoyi.project.shiro.exception.UserPasswordNotMatchException;
+import com.ruoyi.project.shiro.exception.user.RoleBlockedException;
+import com.ruoyi.project.shiro.exception.user.UserBlockedException;
+import com.ruoyi.project.shiro.exception.user.UserNotExistsException;
+import com.ruoyi.project.shiro.exception.user.UserPasswordNotMatchException;
import com.ruoyi.project.shiro.service.PasswordService;
import com.ruoyi.project.system.user.domain.User;
import com.ruoyi.project.system.user.service.IUserService;
@@ -36,20 +38,20 @@ public class LoginService
// 用户名或密码为空 错误
if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password))
{
- SystemLogUtils.log(username, CommonConstant.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"));
+ SystemLogUtils.log(username, CommonConstant.LOGIN_FAIL, MessageUtils.message("not.null"));
throw new UserNotExistsException();
}
// 密码如果不在指定范围内 错误
- if (password.length() < UserConstants.PASSWORD_MIN_LENGTH
- || password.length() > UserConstants.PASSWORD_MAX_LENGTH)
+ if (password.length() < Constants.PASSWORD_MIN_LENGTH
+ || password.length() > Constants.PASSWORD_MAX_LENGTH)
{
SystemLogUtils.log(username, CommonConstant.LOGIN_FAIL, MessageUtils.message("user.password.not.match"));
throw new UserPasswordNotMatchException();
}
// 用户名不在指定范围内 错误
- if (username.length() < UserConstants.USERNAME_MIN_LENGTH
- || username.length() > UserConstants.USERNAME_MAX_LENGTH)
+ if (username.length() < Constants.USERNAME_MIN_LENGTH
+ || username.length() > Constants.USERNAME_MAX_LENGTH)
{
SystemLogUtils.log(username, CommonConstant.LOGIN_FAIL, MessageUtils.message("user.password.not.match"));
throw new UserPasswordNotMatchException();
@@ -66,12 +68,18 @@ public class LoginService
passwordService.validate(user, password);
- if (UserConstants.BLOCKED.equals(user.getStatus()))
+ if (Constants.USER_BLOCKED.equals(user.getStatus()))
{
SystemLogUtils.log(username, CommonConstant.LOGIN_FAIL, MessageUtils.message("user.blocked", user.getRefuseDes()));
throw new UserBlockedException(user.getRefuseDes());
}
+ if (Constants.ROLE_BLOCKED.equals(user.getRole().getStatus()))
+ {
+ SystemLogUtils.log(username, CommonConstant.LOGIN_FAIL, MessageUtils.message("role.blocked", user.getRole().getRemark()));
+ throw new RoleBlockedException(user.getRole().getRemark());
+ }
+
SystemLogUtils.log(username, CommonConstant.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
return user;
}
diff --git a/src/main/java/com/ruoyi/project/shiro/realm/UserRealm.java b/src/main/java/com/ruoyi/project/shiro/realm/UserRealm.java
index b4d8fb406..33e5588eb 100644
--- a/src/main/java/com/ruoyi/project/shiro/realm/UserRealm.java
+++ b/src/main/java/com/ruoyi/project/shiro/realm/UserRealm.java
@@ -20,11 +20,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import com.ruoyi.common.tools.StringTools;
import com.ruoyi.common.utils.security.ShiroUtils;
import com.ruoyi.project.shiro.exception.JCaptchaException;
-import com.ruoyi.project.shiro.exception.RoleBlockedException;
-import com.ruoyi.project.shiro.exception.UserBlockedException;
-import com.ruoyi.project.shiro.exception.UserNotExistsException;
-import com.ruoyi.project.shiro.exception.UserPasswordNotMatchException;
-import com.ruoyi.project.shiro.exception.UserPasswordRetryLimitExceedException;
+import com.ruoyi.project.shiro.exception.user.RoleBlockedException;
+import com.ruoyi.project.shiro.exception.user.UserBlockedException;
+import com.ruoyi.project.shiro.exception.user.UserNotExistsException;
+import com.ruoyi.project.shiro.exception.user.UserPasswordNotMatchException;
+import com.ruoyi.project.shiro.exception.user.UserPasswordRetryLimitExceedException;
import com.ruoyi.project.system.menu.service.IMenuService;
import com.ruoyi.project.system.user.domain.User;
diff --git a/src/main/java/com/ruoyi/project/shiro/service/PasswordService.java b/src/main/java/com/ruoyi/project/shiro/service/PasswordService.java
index 18ce1d909..4a09650bf 100644
--- a/src/main/java/com/ruoyi/project/shiro/service/PasswordService.java
+++ b/src/main/java/com/ruoyi/project/shiro/service/PasswordService.java
@@ -9,8 +9,9 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import com.ruoyi.framework.constant.CommonConstant;
import com.ruoyi.project.shiro.common.utils.Md5Utils;
-import com.ruoyi.project.shiro.exception.UserPasswordNotMatchException;
-import com.ruoyi.project.shiro.exception.UserPasswordRetryLimitExceedException;
+import com.ruoyi.project.shiro.common.utils.MessageUtils;
+import com.ruoyi.project.shiro.exception.user.UserPasswordNotMatchException;
+import com.ruoyi.project.shiro.exception.user.UserPasswordRetryLimitExceedException;
import com.ruoyi.project.system.user.domain.User;
import com.ruoyi.project.util.SystemLogUtils;
@@ -50,13 +51,13 @@ public class PasswordService
}
if (retryCount.incrementAndGet() > Integer.valueOf(maxRetryCount).intValue())
{
- SystemLogUtils.log(loginName, CommonConstant.LOGIN_FAIL, "密码输入错误次数太多禁止登录,最大{}次!", maxRetryCount);
+ SystemLogUtils.log(loginName, CommonConstant.LOGIN_FAIL, MessageUtils.message("user.password.retry.limit.exceed", maxRetryCount));
throw new UserPasswordRetryLimitExceedException(Integer.valueOf(maxRetryCount).intValue());
}
if (!matches(user, password))
{
- SystemLogUtils.log(loginName, CommonConstant.LOGIN_FAIL, "密码错误!密码:{},重试计数:{}", password, retryCount);
+ SystemLogUtils.log(loginName, CommonConstant.LOGIN_FAIL, MessageUtils.message("user.password.retry.limit.count", retryCount, password));
loginRecordCache.put(loginName, retryCount);
throw new UserPasswordNotMatchException();
}
diff --git a/src/main/java/com/ruoyi/project/system/dept/domain/Dept.java b/src/main/java/com/ruoyi/project/system/dept/domain/Dept.java
new file mode 100644
index 000000000..a8216543d
--- /dev/null
+++ b/src/main/java/com/ruoyi/project/system/dept/domain/Dept.java
@@ -0,0 +1,82 @@
+package com.ruoyi.project.system.dept.domain;
+
+import java.io.Serializable;
+
+/**
+ * 部门对象 sys_dept
+ *
+ * @author yangzz
+ */
+public class Dept implements Serializable
+{
+ private static final long serialVersionUID = 1L;
+
+ // 部门ID
+ private Long deptId;
+ // 父部门ID
+ private Long parentId;
+ // 部门名称
+ private String deptName;
+ // 显示顺序
+ private String orderNum;
+ // 部门状态:0正常,1停用
+ private String status;
+
+ public Long getDeptId()
+ {
+ return deptId;
+ }
+
+ public void setDeptId(Long deptId)
+ {
+ this.deptId = deptId;
+ }
+
+ public Long getParentId()
+ {
+ return parentId;
+ }
+
+ public void setParentId(Long parentId)
+ {
+ this.parentId = parentId;
+ }
+
+ public String getDeptName()
+ {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName)
+ {
+ this.deptName = deptName;
+ }
+
+ public String getOrderNum()
+ {
+ return orderNum;
+ }
+
+ public void setOrderNum(String orderNum)
+ {
+ this.orderNum = orderNum;
+ }
+
+ public String getStatus()
+ {
+ return status;
+ }
+
+ public void setStatus(String status)
+ {
+ this.status = status;
+ }
+
+ @Override
+ public String toString()
+ {
+ return "{\"deptId\":\"" + deptId + "\",\"parentId\":\"" + parentId + "\",\"deptName\":\"" + deptName
+ + "\",\"orderNum\":\"" + orderNum + "\",\"status\":\"" + status + "\"} ";
+ }
+
+}
diff --git a/src/main/java/com/ruoyi/project/system/role/domain/Role.java b/src/main/java/com/ruoyi/project/system/role/domain/Role.java
new file mode 100644
index 000000000..ae0cf8145
--- /dev/null
+++ b/src/main/java/com/ruoyi/project/system/role/domain/Role.java
@@ -0,0 +1,107 @@
+package com.ruoyi.project.system.role.domain;
+
+import java.io.Serializable;
+
+/**
+ * 角色对象 sys_role
+ *
+ * @author yangzz
+ */
+public class Role implements Serializable
+{
+ private static final long serialVersionUID = 1L;
+
+ // 角色ID
+ private Long roleId;
+ // 角色名
+ private String roleName;
+ // 角色状态:0正常,1禁用
+ private String status;
+ // 创建时间
+ private String createTime;
+ // 更新时间
+ private String updateTime;
+ // 更新者
+ private String updateBy;
+ // 备注
+ private String remark;
+
+ public Long getRoleId()
+ {
+ return roleId;
+ }
+
+ public void setRoleId(Long roleId)
+ {
+ this.roleId = roleId;
+ }
+
+ public String getRoleName()
+ {
+ return roleName;
+ }
+
+ public void setRoleName(String roleName)
+ {
+ this.roleName = roleName;
+ }
+
+ public String getStatus()
+ {
+ return status;
+ }
+
+ public void setStatus(String status)
+ {
+ this.status = status;
+ }
+
+ public String getCreateTime()
+ {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime)
+ {
+ this.createTime = createTime;
+ }
+
+ public String getUpdateTime()
+ {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime)
+ {
+ this.updateTime = updateTime;
+ }
+
+ public String getUpdateBy()
+ {
+ return updateBy;
+ }
+
+ public void setUpdateBy(String updateBy)
+ {
+ this.updateBy = updateBy;
+ }
+
+ public String getRemark()
+ {
+ return remark;
+ }
+
+ public void setRemark(String remark)
+ {
+ this.remark = remark;
+ }
+
+ @Override
+ public String toString()
+ {
+ return "{\"roleId\":\"" + roleId + "\",\"roleName\":\"" + roleName + "\",\"status\":\"" + status
+ + "\",\"createTime\":\"" + createTime + "\",\"updateTime\":\"" + updateTime + "\",\"updateBy\":\""
+ + updateBy + "\",\"remark\":\"" + remark + "\"} ";
+ }
+
+}
diff --git a/src/main/java/com/ruoyi/project/system/user/domain/User.java b/src/main/java/com/ruoyi/project/system/user/domain/User.java
index 8be8c8227..d38855ac9 100644
--- a/src/main/java/com/ruoyi/project/system/user/domain/User.java
+++ b/src/main/java/com/ruoyi/project/system/user/domain/User.java
@@ -1,6 +1,8 @@
package com.ruoyi.project.system.user.domain;
import java.io.Serializable;
+import com.ruoyi.project.system.dept.domain.Dept;
+import com.ruoyi.project.system.role.domain.Role;
/**
* 用户对象 sys_user
@@ -33,8 +35,10 @@ public class User implements Serializable
private String refuseDes;
// 创建时间
private String createTime;
- // 角色临时字段
- private String roleName;
+ // 部门对象
+ private Dept dept;
+ // 角色对象
+ private Role role;
public User()
{
@@ -158,14 +162,24 @@ public class User implements Serializable
this.createTime = createTime;
}
- public String getRoleName()
+ public Dept getDept()
{
- return roleName;
+ return dept;
}
- public void setRoleName(String roleName)
+ public void setDept(Dept dept)
{
- this.roleName = roleName;
+ this.dept = dept;
+ }
+
+ public Role getRole()
+ {
+ return role;
+ }
+
+ public void setRole(Role role)
+ {
+ this.role = role;
}
@Override
@@ -174,8 +188,7 @@ public class User implements Serializable
return "{\"userId\":\"" + userId + "\",\"deptId\":\"" + deptId + "\",\"loginName\":\"" + loginName
+ "\",\"userName\":\"" + userName + "\",\"email\":\"" + email + "\",\"phonenumber\":\"" + phonenumber
+ "\",\"password\":\"" + password + "\",\"salt\":\"" + salt + "\",\"status\":\"" + status
- + "\",\"refuseDes\":\"" + refuseDes + "\",\"createTime\":\"" + createTime + "\",\"roleName\":\""
- + roleName + "\"} ";
+ + "\",\"refuseDes\":\"" + refuseDes + "\",\"createTime\":\"" + createTime + "\"} ";
}
}
diff --git a/src/main/resources/i18n/messages.properties b/src/main/resources/i18n/messages.properties
index 2e7ae46c1..6a754399c 100644
--- a/src/main/resources/i18n/messages.properties
+++ b/src/main/resources/i18n/messages.properties
@@ -1,18 +1,18 @@
#错误消息
+not.null=* 必须填写
user.not.exists=用户不存在/密码错误
user.password.not.match=用户不存在/密码错误
-user.password.retry.limit.exceed=密码输入错误次数太多,帐户锁定10分钟
+user.password.retry.limit.count=密码输入错误{0}次,{1}
+user.password.retry.limit.exceed=密码输入错误{0}次,帐户锁定10分钟
+user.blocked=用户已封禁,原因:{0}
+role.blocked=角色已封禁,原因:{0}
-
-not.null=* 必须填写
length.not.valid=长度必须在{min}到{max}个字符之间
user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成,且必须以非数字开头
user.password.not.valid=* 5-50个字符
user.jcaptcha.error=验证码错误
-user.blocked=用户已封禁,原因:{0}
-role.blocked=角色已封禁,原因:{0}
user.email.not.valid=邮箱格式错误
user.mobile.phone.number.not.valid=手机号格式错误
diff --git a/src/main/resources/mybatis/mybatis-config.xml b/src/main/resources/mybatis/mybatis-config.xml
index af22a1e1e..563a488fa 100644
--- a/src/main/resources/mybatis/mybatis-config.xml
+++ b/src/main/resources/mybatis/mybatis-config.xml
@@ -4,9 +4,9 @@ PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
-
-
-
-
+
+
+
+
diff --git a/src/main/resources/mybatis/system/SystemLogininforMapper.xml b/src/main/resources/mybatis/system/SystemLogininforMapper.xml
index 3795c60ee..5c78e6a1e 100644
--- a/src/main/resources/mybatis/system/SystemLogininforMapper.xml
+++ b/src/main/resources/mybatis/system/SystemLogininforMapper.xml
@@ -4,8 +4,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
-
+
+
@@ -15,7 +15,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-
+
insert into sys_logininfor (login_name, status, ipaddr, browser, os, msg)
values (#{loginName}, #{status}, #{ipaddr}, #{browser}, #{os}, #{msg})
diff --git a/src/main/resources/mybatis/system/SystemMenuMapper.xml b/src/main/resources/mybatis/system/SystemMenuMapper.xml
index a94a699a2..112c80014 100644
--- a/src/main/resources/mybatis/system/SystemMenuMapper.xml
+++ b/src/main/resources/mybatis/system/SystemMenuMapper.xml
@@ -4,8 +4,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-