diff --git a/API-Document.md b/API-Document.md
index b535785..7ef34da 100644
--- a/API-Document.md
+++ b/API-Document.md
@@ -63,13 +63,13 @@
| 参数 | 值类型 | 可空 | 说明 |
| -------- | ------ | ----- | ------------------------------------------------ |
- | userName | string | false | 用户登录名,非空 |
+ | user_name | string | false | 用户登录名,非空 |
| password | string | false | 用户登录密码,非空,其值为明文密码两次sha256加密 |
例如:
``` json
{
- "userName": "admin",
+ "user_name": "admin",
"password": "e723fb2ff93afb010960ac20c05439f1cdd1ecbb533947e7de9f43656a612052"
}
```
@@ -121,14 +121,14 @@
| 参数 | 值类型 | 可空 | 说明 |
| -------- | ------ | ----- | ------------------------------------------------ |
- | userName | string | false | 用户登录名,非空 |
+ | user_name | string | false | 用户登录名,非空 |
| password | string | false | 用户登录密码,非空,其值为明文密码两次sha256加密 |
| superior | string | true | 上级管理员用户名 |
例如:
``` json
{
- "userName": "admin",
+ "user_name": "admin",
"password": "e723fb2ff93afb010960ac20c05439f1cdd1ecbb533947e7de9f43656a612052",
"superior": "lensfrex"
}
@@ -384,7 +384,7 @@
| 参数 | 值类型 | 可空 | 说明 |
| -------- | -------------- | -------------------- | ------------------------------------------------ |
- | userName | string | false | 用户登录名,非空 |
+ | user_name | string | false | 用户登录名,非空 |
| password | string | false | 用户登录密码,非空,其值为明文密码两次sha256加密 |
| role | int | true | 用户角色 |
| token | string(header) | 管理员的access_token |
@@ -392,7 +392,7 @@
例如:
``` json
{
- "userName": "admin",
+ "user_name": "admin",
"password": "e723fb2ff93afb010960ac20c05439f1cdd1ecbb533947e7de9f43656a612052",
"role": 0
}
diff --git a/pom.xml b/pom.xml
index ac6c270..e8e24ad 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,7 +14,7 @@
dscape-server
dscape-server
- 1.8
+ 11
@@ -136,6 +136,23 @@
commons-pool2
+
+
+ cn.langpy
+ ko-time
+ 2.2.2
+
+
+ org.springframework.boot
+ spring-boot-starter-freemarker
+ 2.7.1
+
+
+ org.springframework.boot
+ spring-boot-starter-aop
+ 2.7.1
+
+
diff --git a/src/main/java/net/lensfrex/dscape/auth/StpInterfaceImpl.java b/src/main/java/net/lensfrex/dscape/auth/StpInterfaceImpl.java
index 5679fe1..89d6623 100644
--- a/src/main/java/net/lensfrex/dscape/auth/StpInterfaceImpl.java
+++ b/src/main/java/net/lensfrex/dscape/auth/StpInterfaceImpl.java
@@ -34,7 +34,6 @@ public class StpInterfaceImpl implements StpInterface {
this.redis = redis;
}
-
@Override
public List getPermissionList(Object loginId, String loginType) {
String uid = (String) loginId;
@@ -43,7 +42,7 @@ public class StpInterfaceImpl implements StpInterface {
List rolePermissions = new ArrayList<>();
for (String role : userRoles) {
- String redisRolePermissionKey = "dscape:auth:role.permission:" + role;
+ String redisRolePermissionKey = "dscape:auth:role:permission:" + role;
if (Boolean.FALSE.equals(redis.hasKey(redisRolePermissionKey))) {
log.debug("角色 " + uid + " 的权限信息缓存不存在,从数据库中查找并放入缓存");
@@ -70,7 +69,7 @@ public class StpInterfaceImpl implements StpInterface {
@Override
public List getRoleList(Object loginId, String loginType) {
String uid = (String) loginId;
- String redisUserRoleKey = "dscape:auth:user.role:" + uid;
+ String redisUserRoleKey = "dscape:auth:user:role:" + uid;
List userRoleList = new ArrayList<>(2);
if (Boolean.FALSE.equals(redis.hasKey(redisUserRoleKey))) {
diff --git a/src/main/java/net/lensfrex/dscape/dao/entity/UserBasic.java b/src/main/java/net/lensfrex/dscape/dao/entity/UserBasic.java
index 77a1fa6..179991a 100644
--- a/src/main/java/net/lensfrex/dscape/dao/entity/UserBasic.java
+++ b/src/main/java/net/lensfrex/dscape/dao/entity/UserBasic.java
@@ -1,16 +1,16 @@
package net.lensfrex.dscape.dao.entity;
import lombok.Data;
-import java.io.Serializable;
-import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
/**
* @description user_basic
* @author lensfrex
- * @date 2022-08-17
+ * @date 2022-08-18
*/
@Data
public class UserBasic implements Serializable {
diff --git a/src/main/java/net/lensfrex/dscape/dao/mapper/UserBasicMapper.java b/src/main/java/net/lensfrex/dscape/dao/mapper/UserBasicMapper.java
new file mode 100644
index 0000000..a1c2f2e
--- /dev/null
+++ b/src/main/java/net/lensfrex/dscape/dao/mapper/UserBasicMapper.java
@@ -0,0 +1,14 @@
+package net.lensfrex.dscape.dao.mapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+import net.lensfrex.dscape.dao.entity.UserBasic;
+import java.util.List;
+/**
+ * @description user_basicMapper
+ * @author lensfrex
+ * @date 2022-08-18
+ */
+@Mapper
+public interface UserBasicMapper extends BaseMapper {
+}
\ No newline at end of file
diff --git a/src/main/java/net/lensfrex/dscape/dao/service/UserBasicService.java b/src/main/java/net/lensfrex/dscape/dao/service/UserBasicService.java
new file mode 100644
index 0000000..31fd3f9
--- /dev/null
+++ b/src/main/java/net/lensfrex/dscape/dao/service/UserBasicService.java
@@ -0,0 +1,13 @@
+package net.lensfrex.dscape.dao.service;
+import net.lensfrex.dscape.dao.entity.UserBasic;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.IService;
+/**
+ * @description user_basic服务层
+ * @author lensfrex
+ * @date 2022-08-18
+ */
+@Service
+public interface UserBasicService extends IService {
+
+}
\ No newline at end of file
diff --git a/src/main/java/net/lensfrex/dscape/dao/service/impl/RolePermissionServiceImpl.java b/src/main/java/net/lensfrex/dscape/dao/service/impl/RolePermissionServiceImpl.java
index b94e376..9d2ae2f 100644
--- a/src/main/java/net/lensfrex/dscape/dao/service/impl/RolePermissionServiceImpl.java
+++ b/src/main/java/net/lensfrex/dscape/dao/service/impl/RolePermissionServiceImpl.java
@@ -17,6 +17,7 @@ import java.util.List;
@Service
public class RolePermissionServiceImpl extends ServiceImpl implements RolePermissionService {
+
@Override
public List getPermissions(String role) {
QueryWrapper wrapper = new QueryWrapper<>();
diff --git a/src/main/java/net/lensfrex/dscape/dao/service/impl/UserBasicServiceImpl.java b/src/main/java/net/lensfrex/dscape/dao/service/impl/UserBasicServiceImpl.java
new file mode 100644
index 0000000..4bd79f5
--- /dev/null
+++ b/src/main/java/net/lensfrex/dscape/dao/service/impl/UserBasicServiceImpl.java
@@ -0,0 +1,16 @@
+/*
+ * Class created by lensfrex.
+ */
+
+package net.lensfrex.dscape.dao.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import net.lensfrex.dscape.dao.entity.UserBasic;
+import net.lensfrex.dscape.dao.mapper.UserBasicMapper;
+import net.lensfrex.dscape.dao.service.UserBasicService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class UserBasicServiceImpl extends ServiceImpl implements UserBasicService {
+
+}
\ No newline at end of file
diff --git a/src/main/java/net/lensfrex/dscape/dto/request/user/RegisterRequestBody.java b/src/main/java/net/lensfrex/dscape/dto/request/user/RegisterRequestBody.java
new file mode 100644
index 0000000..24b18d9
--- /dev/null
+++ b/src/main/java/net/lensfrex/dscape/dto/request/user/RegisterRequestBody.java
@@ -0,0 +1,10 @@
+package net.lensfrex.dscape.dto.request.user;
+
+import lombok.Data;
+
+@Data
+public class RegisterRequestBody {
+ private String password;
+ private String superior;
+ private String userName;
+}
\ No newline at end of file
diff --git a/src/main/java/net/lensfrex/dscape/dto/response/general/ResponseCode.java b/src/main/java/net/lensfrex/dscape/dto/response/general/ResponseCode.java
index a24f8d4..819992f 100644
--- a/src/main/java/net/lensfrex/dscape/dto/response/general/ResponseCode.java
+++ b/src/main/java/net/lensfrex/dscape/dto/response/general/ResponseCode.java
@@ -14,6 +14,10 @@ public enum ResponseCode {
SERVER_INTERNAL_ERROR(50000, "服务器内部错误"),
API_NOT_IMPLEMENT(0, "接口未实现"),
+ USERNAME_OR_PASSWORD_WRONG(40301, "用户名或密码不正确"),
+ USER_WAS_BANNED(40302, "用户已被封禁"),
+ USER_WAS_NOT_IDENTIFIED(40301, "上级管理员未认证该用户"),
+
;
private final int code;
diff --git a/src/main/java/net/lensfrex/dscape/dto/response/user/RegisterResponseBody.java b/src/main/java/net/lensfrex/dscape/dto/response/user/RegisterResponseBody.java
new file mode 100644
index 0000000..a926011
--- /dev/null
+++ b/src/main/java/net/lensfrex/dscape/dto/response/user/RegisterResponseBody.java
@@ -0,0 +1,9 @@
+package net.lensfrex.dscape.dto.response.user;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+@Data
+public class RegisterResponseBody {
+ private String uid;
+}
\ No newline at end of file
diff --git a/src/main/java/net/lensfrex/dscape/enums/user/UserBasic.java b/src/main/java/net/lensfrex/dscape/enums/user/UserBasic.java
deleted file mode 100644
index 6504014..0000000
--- a/src/main/java/net/lensfrex/dscape/enums/user/UserBasic.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package net.lensfrex.dscape.enums.user;
-
-public class UserBasic {
- private String uid;
- private String userName;
- private String password;
- private UserStatus status;
- private UserRole role;
-
- public String getUid() {
- return uid;
- }
-
- public void setUid(String uid) {
- this.uid = uid;
- }
-
- public String getUserName() {
- return userName;
- }
-
- public void setUserName(String userName) {
- this.userName = userName;
- }
-
- public String getPassword() {
- return password;
- }
-
- public void setPassword(String password) {
- this.password = password;
- }
-
- public UserRole getRole() {
- return role;
- }
-
- public void setRole(UserRole role) {
- this.role = role;
- }
-
- public UserStatus getStatus() {
- return status;
- }
-
- public void setStatus(UserStatus status) {
- this.status = status;
- }
-
- @Override
- public String toString() {
- final StringBuffer sb = new StringBuffer("UserBasic{");
- sb.append("uid='").append(uid).append('\'');
- sb.append(", userName='").append(userName).append('\'');
- sb.append(", password='").append(password).append('\'');
- sb.append(", status=").append(status);
- sb.append(", role=").append(role);
- sb.append('}');
- return sb.toString();
- }
-}
-
diff --git a/src/main/java/net/lensfrex/dscape/enums/user/UserRole.java b/src/main/java/net/lensfrex/dscape/enums/user/UserRole.java
deleted file mode 100644
index c889c60..0000000
--- a/src/main/java/net/lensfrex/dscape/enums/user/UserRole.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package net.lensfrex.dscape.enums.user;
-
-import com.baomidou.mybatisplus.annotation.EnumValue;
-
-public enum UserRole {
- ADMIN(1, "admin"), NORMAL_USER(0, "normal");
-
- @EnumValue
- private final int role;
-
- private final String desc;
-
- UserRole(int role, String desc) {
- this.role = role;
- this.desc = desc;
- }
-}
diff --git a/src/main/java/net/lensfrex/dscape/enums/user/UserRoleEnum.java b/src/main/java/net/lensfrex/dscape/enums/user/UserRoleEnum.java
new file mode 100644
index 0000000..6b3c5f1
--- /dev/null
+++ b/src/main/java/net/lensfrex/dscape/enums/user/UserRoleEnum.java
@@ -0,0 +1,20 @@
+package net.lensfrex.dscape.enums.user;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import lombok.Getter;
+
+@Getter
+public enum UserRoleEnum {
+ ADMIN(1, "admin"),
+ NORMAL_USER(0, "normal");
+
+ @EnumValue
+ private final int code;
+
+ private final String name;
+
+ UserRoleEnum(int code, String name) {
+ this.code = code;
+ this.name = name;
+ }
+}
diff --git a/src/main/java/net/lensfrex/dscape/enums/user/UserStatus.java b/src/main/java/net/lensfrex/dscape/enums/user/UserStatus.java
deleted file mode 100644
index d2a3a6b..0000000
--- a/src/main/java/net/lensfrex/dscape/enums/user/UserStatus.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package net.lensfrex.dscape.enums.user;
-
-import com.baomidou.mybatisplus.annotation.EnumValue;
-
-public enum UserStatus {
-
- NORMAL(0), BANNED(1), DELETED(2);
-
- @EnumValue
- private final int status;
-
- UserStatus(int status) {
- this.status = status;
- }
-}
diff --git a/src/main/java/net/lensfrex/dscape/enums/user/UserStatusEnum.java b/src/main/java/net/lensfrex/dscape/enums/user/UserStatusEnum.java
new file mode 100644
index 0000000..f79a895
--- /dev/null
+++ b/src/main/java/net/lensfrex/dscape/enums/user/UserStatusEnum.java
@@ -0,0 +1,21 @@
+package net.lensfrex.dscape.enums.user;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import lombok.Getter;
+
+@Getter
+public enum UserStatusEnum {
+
+ NORMAL(0, "正常"),
+ BANNED(1, "封禁中"),
+ NOT_IDENTIFIED(2, "管理员未认证");
+
+ @EnumValue
+ private final int code;
+ private final String name;
+
+ UserStatusEnum(int code, String name) {
+ this.code = code;
+ this.name = name;
+ }
+}
diff --git a/src/main/java/net/lensfrex/dscape/exception/GlobalException.java b/src/main/java/net/lensfrex/dscape/exception/GlobalException.java
new file mode 100644
index 0000000..6a5e8c0
--- /dev/null
+++ b/src/main/java/net/lensfrex/dscape/exception/GlobalException.java
@@ -0,0 +1,16 @@
+package net.lensfrex.dscape.exception;
+
+import net.lensfrex.dscape.dto.response.general.ResponseCode;
+
+public class GlobalException extends RuntimeException {
+ private final ResponseCode responseCode;
+
+ public GlobalException(ResponseCode responseCode) {
+ super(responseCode.toString());
+ this.responseCode = responseCode;
+ }
+
+ public ResponseCode getResponseCode() {
+ return responseCode;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/net/lensfrex/dscape/exception/handler/GlobalExceptionHandler.java b/src/main/java/net/lensfrex/dscape/exception/handler/GlobalExceptionHandler.java
new file mode 100644
index 0000000..f67260b
--- /dev/null
+++ b/src/main/java/net/lensfrex/dscape/exception/handler/GlobalExceptionHandler.java
@@ -0,0 +1,137 @@
+package net.lensfrex.dscape.exception.handler;
+
+import com.fasterxml.jackson.databind.JsonMappingException;
+import net.lensfrex.dscape.dto.response.general.Response;
+import net.lensfrex.dscape.dto.response.general.ResponseCode;
+import net.lensfrex.dscape.exception.GlobalException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.converter.HttpMessageNotReadableException;
+import org.springframework.web.HttpMediaTypeNotSupportedException;
+import org.springframework.web.HttpRequestMethodNotSupportedException;
+import org.springframework.web.bind.MissingServletRequestParameterException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
+import org.springframework.web.multipart.MultipartException;
+
+/**
+ * 全局异常处理,负责后端抛出Exception时响应相应的信息
+ */
+@RestControllerAdvice
+public class GlobalExceptionHandler {
+ private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);
+
+ /**
+ * 负责处理各种自定义业务异常(权限不足,学号不存在等)
+ * @param e 抛出的异常
+ * @return 统一响应
+ */
+ @ExceptionHandler(GlobalException.class)
+ public Response