From 49ca4a1119c3c72b53a4576c23d263798ea8baa5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=83=AD=E6=B3=B3=E8=BE=B0?= <312189607@qq.com>
Date: Tue, 23 Jan 2024 17:23:52 +0800
Subject: [PATCH 1/3] =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=9D=83=E9=99=90?=
=?UTF-8?q?=E5=85=B3=E7=B3=BB=E5=9F=BA=E7=A1=80=E7=BB=93=E6=9E=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
milkbox-service/pom.xml | 1 +
milkbox-service/service-dev/pom.xml | 20 ++
.../dev/core/config/DevConfiguration.java | 11 ++
.../main/controller/LogMainController.java | 1 +
.../modular/main/entity/LogMainEntity.java | 25 ++-
.../controller/SysRelationshipController.java | 85 +++++++++
.../entity/SysRelationshipEntity.java | 69 +++++++
.../enums/SysRelationshipTypeEnum.java | 62 ++++++
.../mapper/SysRelationshipMapper.java | 16 ++
.../mapper/mapping/SysRelationshipMapper.xml | 6 +
.../param/SysRelationshipAddParam.java | 55 ++++++
.../param/SysRelationshipEditParam.java | 63 +++++++
.../param/SysRelationshipIdParam.java | 30 +++
.../param/SysRelationshipPageParam.java | 53 ++++++
.../service/SysRelationshipService.java | 67 +++++++
.../impl/SysRelationshipServiceImpl.java | 99 ++++++++++
.../relationship/vo/SysRelationshipVo.java | 61 ++++++
.../modular/role/entity/SysRoleEntity.java | 3 +
.../user/controller/SysUserController.java | 85 +++++++++
.../modular/user/entity/SysUserEntity.java | 178 ++++++++++++++++++
.../modular/user/enums/SysUserGenderEnum.java | 41 ++++
.../modular/user/enums/SysUserStatusEnum.java | 53 ++++++
.../modular/user/mapper/SysUserMapper.java | 16 ++
.../user/mapper/mapping/SysUserMapper.xml | 6 +
.../modular/user/param/SysUserAddParam.java | 143 ++++++++++++++
.../modular/user/param/SysUserEditParam.java | 153 +++++++++++++++
.../modular/user/param/SysUserIdParam.java | 30 +++
.../modular/user/param/SysUserPageParam.java | 146 ++++++++++++++
.../modular/user/service/SysUserService.java | 67 +++++++
.../user/service/impl/SysUserServiceImpl.java | 99 ++++++++++
.../sys/modular/user/vo/SysUserVo.java | 154 +++++++++++++++
pom.xml | 6 +
32 files changed, 1897 insertions(+), 7 deletions(-)
create mode 100644 milkbox-service/service-dev/pom.xml
create mode 100644 milkbox-service/service-dev/src/main/java/top/milkbox/dev/core/config/DevConfiguration.java
create mode 100644 milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/controller/SysRelationshipController.java
create mode 100644 milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/entity/SysRelationshipEntity.java
create mode 100644 milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/enums/SysRelationshipTypeEnum.java
create mode 100644 milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/mapper/SysRelationshipMapper.java
create mode 100644 milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/mapper/mapping/SysRelationshipMapper.xml
create mode 100644 milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/param/SysRelationshipAddParam.java
create mode 100644 milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/param/SysRelationshipEditParam.java
create mode 100644 milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/param/SysRelationshipIdParam.java
create mode 100644 milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/param/SysRelationshipPageParam.java
create mode 100644 milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/service/SysRelationshipService.java
create mode 100644 milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/service/impl/SysRelationshipServiceImpl.java
create mode 100644 milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/vo/SysRelationshipVo.java
create mode 100644 milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/controller/SysUserController.java
create mode 100644 milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/entity/SysUserEntity.java
create mode 100644 milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/enums/SysUserGenderEnum.java
create mode 100644 milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/enums/SysUserStatusEnum.java
create mode 100644 milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/mapper/SysUserMapper.java
create mode 100644 milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/mapper/mapping/SysUserMapper.xml
create mode 100644 milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/param/SysUserAddParam.java
create mode 100644 milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/param/SysUserEditParam.java
create mode 100644 milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/param/SysUserIdParam.java
create mode 100644 milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/param/SysUserPageParam.java
create mode 100644 milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/service/SysUserService.java
create mode 100644 milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/service/impl/SysUserServiceImpl.java
create mode 100644 milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/vo/SysUserVo.java
diff --git a/milkbox-service/pom.xml b/milkbox-service/pom.xml
index c780569..fc49d81 100644
--- a/milkbox-service/pom.xml
+++ b/milkbox-service/pom.xml
@@ -15,6 +15,7 @@
service-test
service-sys
service-log
+ service-dev
diff --git a/milkbox-service/service-dev/pom.xml b/milkbox-service/service-dev/pom.xml
new file mode 100644
index 0000000..c97b490
--- /dev/null
+++ b/milkbox-service/service-dev/pom.xml
@@ -0,0 +1,20 @@
+
+
+ 4.0.0
+
+ top.milkbox
+ milkbox-service
+ 1.0-DEV
+
+
+ service-dev
+
+
+ 21
+ 21
+ UTF-8
+
+
+
\ No newline at end of file
diff --git a/milkbox-service/service-dev/src/main/java/top/milkbox/dev/core/config/DevConfiguration.java b/milkbox-service/service-dev/src/main/java/top/milkbox/dev/core/config/DevConfiguration.java
new file mode 100644
index 0000000..4382dc0
--- /dev/null
+++ b/milkbox-service/service-dev/src/main/java/top/milkbox/dev/core/config/DevConfiguration.java
@@ -0,0 +1,11 @@
+package top.milkbox.dev.core.config;
+
+/**
+ * 创建时间: 2024-01-23 下午 3:39
+ *
+ * @author milkbox
+ */
+public class DevConfiguration {
+
+ public static final String MODULE_NAME = "开发模块";
+}
diff --git a/milkbox-service/service-log/src/main/java/top/milkbox/log/modular/main/controller/LogMainController.java b/milkbox-service/service-log/src/main/java/top/milkbox/log/modular/main/controller/LogMainController.java
index 3694e1d..ed8c29f 100644
--- a/milkbox-service/service-log/src/main/java/top/milkbox/log/modular/main/controller/LogMainController.java
+++ b/milkbox-service/service-log/src/main/java/top/milkbox/log/modular/main/controller/LogMainController.java
@@ -23,6 +23,7 @@ import java.util.List;
/**
* 日志主表(log_main)控制器
+ * TODO 日志接口需要根据用户权限进行修改
*
* @author milkbox
* @date 2024-1-23
diff --git a/milkbox-service/service-log/src/main/java/top/milkbox/log/modular/main/entity/LogMainEntity.java b/milkbox-service/service-log/src/main/java/top/milkbox/log/modular/main/entity/LogMainEntity.java
index fbe93d6..2859516 100644
--- a/milkbox-service/service-log/src/main/java/top/milkbox/log/modular/main/entity/LogMainEntity.java
+++ b/milkbox-service/service-log/src/main/java/top/milkbox/log/modular/main/entity/LogMainEntity.java
@@ -1,9 +1,7 @@
package top.milkbox.log.modular.main.entity;
-import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.AllArgsConstructor;
@@ -16,11 +14,15 @@ import top.milkbox.common.pojo.CommonEntity;
import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+
/**
* 日志_日志主表
*
* @author milkbox
- * @date 2024-1-18
+ * @date 2024-1-23
*/
@Data
@NoArgsConstructor
@@ -43,6 +45,7 @@ public class LogMainEntity extends CommonEntity implements Serializable {
*/
@Schema(title = "日志分类",
description = "日志分类。暂定为枚举类型,api日志还是其他方法的日志,取值api和method")
+ @TableField(updateStrategy = FieldStrategy.ALWAYS)
private LogCategoryEnum category;
/**
@@ -50,6 +53,7 @@ public class LogMainEntity extends CommonEntity implements Serializable {
*/
@Schema(title = "日志名称",
description = "日志名称。对日志做一个简单的描述")
+ @TableField(updateStrategy = FieldStrategy.ALWAYS)
private String name;
/**
@@ -73,6 +77,7 @@ public class LogMainEntity extends CommonEntity implements Serializable {
*/
@Schema(title = "日志的详细描述",
description = "日志的详细描述。如果报错,则保存报错堆栈")
+ @TableField(updateStrategy = FieldStrategy.ALWAYS)
private String description;
/**
@@ -80,6 +85,7 @@ public class LogMainEntity extends CommonEntity implements Serializable {
*/
@Schema(title = "操作主机地址",
description = "操作主机地址")
+ @TableField(updateStrategy = FieldStrategy.ALWAYS)
private String operationIp;
/**
@@ -87,6 +93,7 @@ public class LogMainEntity extends CommonEntity implements Serializable {
*/
@Schema(title = "操作的浏览器",
description = "操作的浏览器")
+ @TableField(updateStrategy = FieldStrategy.ALWAYS)
private String operationBrowser;
/**
@@ -94,6 +101,7 @@ public class LogMainEntity extends CommonEntity implements Serializable {
*/
@Schema(title = "操作系统",
description = "操作系统")
+ @TableField(updateStrategy = FieldStrategy.ALWAYS)
private String operationSystem;
/**
@@ -101,22 +109,23 @@ public class LogMainEntity extends CommonEntity implements Serializable {
*/
@Schema(title = "请求地址",
description = "请求地址。如果是api日志")
+ @TableField(updateStrategy = FieldStrategy.ALWAYS)
private String requestUrl;
/**
* 参数json类型
*/
@Schema(title = "参数json类型",
- description = "请求参数json类型")
- @TableField(typeHandler = JacksonTypeHandler.class)
+ description = "参数json类型")
+ @TableField(typeHandler = JacksonTypeHandler.class, updateStrategy = FieldStrategy.ALWAYS)
private Object paramJson;
/**
* 结果json类型
*/
@Schema(title = "结果json类型",
- description = "响应对象json类型")
- @TableField(typeHandler = JacksonTypeHandler.class)
+ description = "结果json类型")
+ @TableField(typeHandler = JacksonTypeHandler.class, updateStrategy = FieldStrategy.ALWAYS)
private Object resultJson;
/**
@@ -124,6 +133,7 @@ public class LogMainEntity extends CommonEntity implements Serializable {
*/
@Schema(title = "模块名称",
description = "模块名称")
+ @TableField(updateStrategy = FieldStrategy.ALWAYS)
private String module;
/**
@@ -131,6 +141,7 @@ public class LogMainEntity extends CommonEntity implements Serializable {
*/
@Schema(title = "类型",
description = "类型。枚举")
+ @TableField(updateStrategy = FieldStrategy.ALWAYS)
private LogTypeEnum type;
}
\ No newline at end of file
diff --git a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/controller/SysRelationshipController.java b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/controller/SysRelationshipController.java
new file mode 100644
index 0000000..098c42c
--- /dev/null
+++ b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/controller/SysRelationshipController.java
@@ -0,0 +1,85 @@
+package top.milkbox.sys.modular.relationship.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.Size;
+import lombok.AllArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import top.milkbox.common.annotation.CommonLog;
+import top.milkbox.common.enums.LogTypeEnum;
+import top.milkbox.sys.core.config.SysConfiguration;
+import top.milkbox.sys.modular.relationship.param.SysRelationshipAddParam;
+import top.milkbox.sys.modular.relationship.param.SysRelationshipEditParam;
+import top.milkbox.sys.modular.relationship.param.SysRelationshipIdParam;
+import top.milkbox.sys.modular.relationship.param.SysRelationshipPageParam;
+import top.milkbox.sys.modular.relationship.service.SysRelationshipService;
+import top.milkbox.sys.modular.relationship.vo.SysRelationshipVo;
+import top.milkbox.common.pojo.CommonResult;
+
+import java.util.List;
+
+/**
+ * 关系表(sys_relationship)控制器
+ *
+ * @author milkbox
+ * @date 2024-1-23
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/sysRelationship")
+@Tag(name = "关系表控制器", description = "SysRelationshipController")
+public class SysRelationshipController {
+
+ private SysRelationshipService sysRelationshipService;
+
+ @PostMapping("/add")
+ @Operation(summary = "添加", description = "添加一条数据")
+ @CommonLog(value = "添加", description = "添加一条数据",
+ module = SysConfiguration.MODULE_NAME, type = LogTypeEnum.INSERT)
+ public CommonResult
--
Gitee
From 41d785965020558194c4225bd195cced3250ce3a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=83=AD=E6=B3=B3=E8=BE=B0?= <312189607@qq.com>
Date: Sat, 27 Jan 2024 17:00:50 +0800
Subject: [PATCH 3/3] =?UTF-8?q?=E4=BD=BF=E7=94=A8BCrypt=E5=AF=B9=E7=94=A8?=
=?UTF-8?q?=E6=88=B7=E7=9A=84=E5=AF=86=E7=A0=81=E8=BF=9B=E8=A1=8C=E5=90=8E?=
=?UTF-8?q?=E7=AB=AF=E5=93=88=E5=B8=8C=E5=A4=84=E7=90=86=EF=BC=8C=E5=AE=9E?=
=?UTF-8?q?=E7=8E=B0=E5=9F=BA=E7=A1=80=E7=9A=84=E6=B3=A8=E5=86=8C=E5=92=8C?=
=?UTF-8?q?=E7=99=BB=E5=BD=95=E3=80=82=E4=BD=BF=E7=94=A8=E6=B3=A8=E8=A7=A3?=
=?UTF-8?q?=E8=BF=9B=E8=A1=8C=E7=99=BB=E5=BD=95=E9=89=B4=E6=9D=83?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 9 ++
...fig.java => MybatisPlusConfiguration.java} | 2 +-
.../app/core/config/SaTokenConfiguration.java | 17 ++++
.../core/handler/GlobalControllerAdvice.java | 34 +++++--
.../src/main/resources/application.yml | 4 +-
.../java/top/milkbox/log/core/aop/LogAop.java | 4 +-
.../main/controller/LogMainController.java | 43 ++++----
.../modular/main/service/LogMainService.java | 12 +--
.../controller/SysRelationshipController.java | 12 ++-
.../enums/SysRelationshipTypeEnum.java | 7 +-
.../param/SysRelationshipAddParam.java | 3 +-
.../param/SysRelationshipEditParam.java | 3 +-
.../role/controller/SysRoleController.java | 12 ++-
.../user/controller/SysUserController.java | 52 ++++++++--
.../modular/user/param/SysUserAddParam.java | 70 ++-----------
.../modular/user/param/SysUserEditParam.java | 2 +
.../modular/user/param/SysUserLoginParam.java | 38 ++++++++
.../modular/user/param/SysUserPageParam.java | 12 +--
.../user/param/SysUserRegisterParam.java | 75 ++++++++++++++
.../modular/user/service/SysUserService.java | 40 +++++++-
.../user/service/impl/SysUserServiceImpl.java | 97 ++++++++++++++++++-
.../sys/modular/user/vo/SysUserVo.java | 19 ++--
22 files changed, 416 insertions(+), 151 deletions(-)
rename milkbox-app/src/main/java/top/milkbox/app/core/config/{MybatisPlusConfig.java => MybatisPlusConfiguration.java} (96%)
create mode 100644 milkbox-app/src/main/java/top/milkbox/app/core/config/SaTokenConfiguration.java
create mode 100644 milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/param/SysUserLoginParam.java
create mode 100644 milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/param/SysUserRegisterParam.java
diff --git a/README.md b/README.md
index 4484bd6..445a366 100644
--- a/README.md
+++ b/README.md
@@ -58,6 +58,15 @@ java21的bin目录/java -jar jar包目录/jar包名称.jar --add-opens java.base

+主要包含的环境变量
+
+```bash
+DB_HOST=localhost
+DB_PASSWORD=xxxx
+DB_PORT=3306
+DB_USERNAME=root
+```
+
启动命令参考
win
diff --git a/milkbox-app/src/main/java/top/milkbox/app/core/config/MybatisPlusConfig.java b/milkbox-app/src/main/java/top/milkbox/app/core/config/MybatisPlusConfiguration.java
similarity index 96%
rename from milkbox-app/src/main/java/top/milkbox/app/core/config/MybatisPlusConfig.java
rename to milkbox-app/src/main/java/top/milkbox/app/core/config/MybatisPlusConfiguration.java
index f17188e..3281b82 100644
--- a/milkbox-app/src/main/java/top/milkbox/app/core/config/MybatisPlusConfig.java
+++ b/milkbox-app/src/main/java/top/milkbox/app/core/config/MybatisPlusConfiguration.java
@@ -12,7 +12,7 @@ import org.springframework.context.annotation.Configuration;
* @author milkbox
*/
@Configuration
-public class MybatisPlusConfig {
+public class MybatisPlusConfiguration {
/**
* 添加分页插件
diff --git a/milkbox-app/src/main/java/top/milkbox/app/core/config/SaTokenConfiguration.java b/milkbox-app/src/main/java/top/milkbox/app/core/config/SaTokenConfiguration.java
new file mode 100644
index 0000000..92544a6
--- /dev/null
+++ b/milkbox-app/src/main/java/top/milkbox/app/core/config/SaTokenConfiguration.java
@@ -0,0 +1,17 @@
+package top.milkbox.app.core.config;
+
+import cn.dev33.satoken.interceptor.SaInterceptor;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@Configuration
+public class SaTokenConfiguration implements WebMvcConfigurer {
+
+ // 注册 Sa-Token 拦截器,打开注解式鉴权功能
+ @Override
+ public void addInterceptors(InterceptorRegistry registry) {
+ // 注册 Sa-Token 拦截器,打开注解式鉴权功能
+ registry.addInterceptor(new SaInterceptor()).addPathPatterns("/**");
+ }
+}
diff --git a/milkbox-app/src/main/java/top/milkbox/app/core/handler/GlobalControllerAdvice.java b/milkbox-app/src/main/java/top/milkbox/app/core/handler/GlobalControllerAdvice.java
index 1636594..b0c6d64 100644
--- a/milkbox-app/src/main/java/top/milkbox/app/core/handler/GlobalControllerAdvice.java
+++ b/milkbox-app/src/main/java/top/milkbox/app/core/handler/GlobalControllerAdvice.java
@@ -1,5 +1,6 @@
package top.milkbox.app.core.handler;
+import cn.dev33.satoken.exception.NotLoginException;
import cn.hutool.core.util.StrUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.converter.HttpMessageNotReadableException;
@@ -40,7 +41,13 @@ public class GlobalControllerAdvice {
}
/**
- * 全局异常捕捉,在此处进行处理
+ * 全局异常捕捉,在此处进行处理
+ * 打印日志堆栈的方式(Exception e):
+ *
+ * - 直接打印到控制台:
e.printStackTrace()
+ * - 通过日志方式打印:
log.error("其他字符串信息", e);
+ * - 获取堆栈数组:
e.getStackTrace()
+ *
*
* @param exception 捕获到的异常
* @return 通用响应对象
@@ -49,8 +56,23 @@ public class GlobalControllerAdvice {
@ExceptionHandler(value = Exception.class)
public CommonResult errorHandler(Exception exception) {
+ // 服务层业务逻辑异常
+ if (exception instanceof CommonServiceException commonServiceException) {
+ return new CommonResult<>(CommonStatusCodeEnum.ERROR506.getCode(),
+ CommonStatusCodeEnum.ERROR506.getMessage(), commonServiceException.getMessage());
+ }
+
+ // 用户未登录异常处理
+ // 可以通过notLoginException的type属性来区分未登录的类型
+ // 具体信息请查看cn.dev33.satoken.exception.NotLoginException
+ else if (exception instanceof NotLoginException notLoginException) {
+ notLoginException.setStackTrace(new StackTraceElement[0]); // 删除堆栈信息,因为它太长了
+ return new CommonResult<>(CommonStatusCodeEnum.ERROR401.getCode(),
+ notLoginException.getMessage(), notLoginException);
+ }
+
// 后端校验不通过异常
- if (exception instanceof MethodArgumentNotValidException errorResponse) {
+ else if (exception instanceof MethodArgumentNotValidException errorResponse) {
StringBuilder errorMessage = new StringBuilder();
errorResponse.getAllErrors()
.forEach(objectError -> errorMessage.append(objectError.getDefaultMessage()).append(StrUtil.COMMA));
@@ -74,12 +96,6 @@ public class GlobalControllerAdvice {
log.warn("校验报错,但是校验选项为空");
}
- // 服务层业务逻辑异常
- else if (exception instanceof CommonServiceException commonServiceException) {
- return new CommonResult<>(CommonStatusCodeEnum.ERROR506.getCode(),
- CommonStatusCodeEnum.ERROR506.getMessage(), commonServiceException.getMessage());
- }
-
// 请求参数的格式错误
else if (exception instanceof HttpMessageNotReadableException httpMessageNotReadableException) {
String errorMessage = "请求参数格式错误(" + httpMessageNotReadableException.getMessage() + ")";
@@ -92,6 +108,6 @@ public class GlobalControllerAdvice {
log.error("其他未处理异常:{}", exception.getMessage(), exception);
// exception.printStackTrace(); // 系统控制台堆栈,可能不会存入日志
return new CommonResult<>(CommonStatusCodeEnum.ERROR500.getCode(),
- CommonStatusCodeEnum.ERROR500.getMessage(), exception.toString());
+ CommonStatusCodeEnum.ERROR500.getMessage(), exception.getStackTrace());
}
}
diff --git a/milkbox-app/src/main/resources/application.yml b/milkbox-app/src/main/resources/application.yml
index 56909e8..340e194 100644
--- a/milkbox-app/src/main/resources/application.yml
+++ b/milkbox-app/src/main/resources/application.yml
@@ -11,7 +11,7 @@ spring:
datasource:
# 主机地址、用户名和密码请配置环境变量
driver-class-name: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://${DB_HOST}:13306/milkbox2?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&useInformationSchema=true
+ url: jdbc:mysql://${DB_HOST}:${DB_PORT}/milkbox2?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&useInformationSchema=true
type: com.alibaba.druid.pool.DruidDataSource
username: ${DB_USERNAME}
password: ${DB_PASSWORD}
@@ -64,7 +64,7 @@ mybatis-plus:
############## Sa-Token配置 (文档: https://sa-token.cc) ##############
sa-token:
- # token 名称(同时也是 cookie 名称)
+ # token 名称(同时也是浏览器中cookie的名称)
token-name: sa-token
# token 有效期(单位:秒) 默认30天,-1 代表永久有效
timeout: 2592000
diff --git a/milkbox-service/service-log/src/main/java/top/milkbox/log/core/aop/LogAop.java b/milkbox-service/service-log/src/main/java/top/milkbox/log/core/aop/LogAop.java
index 3b01a98..efbdc36 100644
--- a/milkbox-service/service-log/src/main/java/top/milkbox/log/core/aop/LogAop.java
+++ b/milkbox-service/service-log/src/main/java/top/milkbox/log/core/aop/LogAop.java
@@ -38,7 +38,7 @@ public class LogAop {
* @return 切点方法的返回值
*/
@Around("LogAop.logPointcut()")
- public Object logAround(ProceedingJoinPoint joinPoint) {
+ public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Object result;
// 这里只能捕获到对应方法内部发生的异常
@@ -50,7 +50,7 @@ public class LogAop {
} catch (Throwable throwable) {
logMainService.saveThrowableLogAsync(joinPoint, throwable);
// 需要继续抛出异常
- throw new RuntimeException(throwable);
+ throw throwable;
}
return result;
}
diff --git a/milkbox-service/service-log/src/main/java/top/milkbox/log/modular/main/controller/LogMainController.java b/milkbox-service/service-log/src/main/java/top/milkbox/log/modular/main/controller/LogMainController.java
index ed8c29f..874881f 100644
--- a/milkbox-service/service-log/src/main/java/top/milkbox/log/modular/main/controller/LogMainController.java
+++ b/milkbox-service/service-log/src/main/java/top/milkbox/log/modular/main/controller/LogMainController.java
@@ -1,5 +1,6 @@
package top.milkbox.log.modular.main.controller;
+import cn.dev33.satoken.annotation.SaCheckLogin;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -23,11 +24,11 @@ import java.util.List;
/**
* 日志主表(log_main)控制器
- * TODO 日志接口需要根据用户权限进行修改
*
* @author milkbox
* @date 2024-1-23
*/
+@SaCheckLogin
@RestController
@AllArgsConstructor
@RequestMapping("/logMain")
@@ -36,14 +37,14 @@ public class LogMainController {
private LogMainService logMainService;
- @PostMapping("/add")
- @Operation(summary = "添加", description = "添加一条数据")
- @CommonLog(value = "添加", description = "添加一条数据",
- module = LogConfiguration.MODULE_NAME, type = LogTypeEnum.INSERT)
- public CommonResult add(@Validated @RequestBody LogMainAddParam addParam) {
- logMainService.add(addParam);
- return CommonResult.ok();
- }
+// @PostMapping("/add")
+// @Operation(summary = "添加", description = "添加一条数据")
+// @CommonLog(value = "添加", description = "添加一条数据",
+// module = LogConfiguration.MODULE_NAME, type = LogTypeEnum.INSERT)
+// public CommonResult add(@Validated @RequestBody LogMainAddParam addParam) {
+// logMainService.add(addParam);
+// return CommonResult.ok();
+// }
@DeleteMapping("/delete")
@Operation(summary = "批量删除")
@@ -58,27 +59,27 @@ public class LogMainController {
return CommonResult.ok();
}
- @PutMapping("/edit")
- @Operation(summary = "修改", description = "修改一条数据")
- @CommonLog(value = "修改", description = "修改一条数据",
- module = LogConfiguration.MODULE_NAME, type = LogTypeEnum.UPDATE)
- public CommonResult edit(@Validated @RequestBody LogMainEditParam editParam) {
- logMainService.edit(editParam);
- return CommonResult.ok();
- }
+// @PutMapping("/edit")
+// @Operation(summary = "修改", description = "修改一条数据")
+// @CommonLog(value = "修改", description = "修改一条数据",
+// module = LogConfiguration.MODULE_NAME, type = LogTypeEnum.UPDATE)
+// public CommonResult edit(@Validated @RequestBody LogMainEditParam editParam) {
+// logMainService.edit(editParam);
+// return CommonResult.ok();
+// }
@GetMapping("/detail")
@Operation(summary = "详情", description = "查询一条数据的详情")
- @CommonLog(value = "详情", description = "查询一条数据的详情",
- module = LogConfiguration.MODULE_NAME, type = LogTypeEnum.SELECT)
+ @CommonLog(value = "详情", description = "查询一条数据的详情", saveResult = false,
+ module = LogConfiguration.MODULE_NAME, type = LogTypeEnum.SELECT) // 不保存返回值到数据库,防止套娃
public CommonResult detail(@Validated LogMainIdParam idParam) {
return CommonResult.ok(logMainService.detail(idParam));
}
@GetMapping("/page")
@Operation(summary = "分页查询", description = "查询条件分页查询")
- @CommonLog(value = "分页查询", description = "查询条件分页查询",
- module = LogConfiguration.MODULE_NAME, type = LogTypeEnum.SELECT)
+ @CommonLog(value = "分页查询", description = "查询条件分页查询", saveResult = false,
+ module = LogConfiguration.MODULE_NAME, type = LogTypeEnum.SELECT) // 不保存返回值到数据库,防止套娃
public CommonResult> page(@Validated LogMainPageParam pageParam) {
return CommonResult.ok(logMainService.page(pageParam));
}
diff --git a/milkbox-service/service-log/src/main/java/top/milkbox/log/modular/main/service/LogMainService.java b/milkbox-service/service-log/src/main/java/top/milkbox/log/modular/main/service/LogMainService.java
index 5de9d65..d963653 100644
--- a/milkbox-service/service-log/src/main/java/top/milkbox/log/modular/main/service/LogMainService.java
+++ b/milkbox-service/service-log/src/main/java/top/milkbox/log/modular/main/service/LogMainService.java
@@ -34,12 +34,12 @@ public interface LogMainService extends IService {
*/
void delete(List paramList);
- /**
- * 通过id编辑
- *
- * @param editParam 编辑参数
- */
- void edit(LogMainEditParam editParam);
+// /**
+// * 通过id编辑
+// *
+// * @param editParam 编辑参数
+// */
+// void edit(LogMainEditParam editParam);
/**
* 通过id查询详情
diff --git a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/controller/SysRelationshipController.java b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/controller/SysRelationshipController.java
index 098c42c..116e619 100644
--- a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/controller/SysRelationshipController.java
+++ b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/controller/SysRelationshipController.java
@@ -1,5 +1,6 @@
package top.milkbox.sys.modular.relationship.controller;
+import cn.dev33.satoken.annotation.SaCheckLogin;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -25,8 +26,9 @@ import java.util.List;
* 关系表(sys_relationship)控制器
*
* @author milkbox
- * @date 2024-1-23
+ * @date 2024-1-27
*/
+@SaCheckLogin
@RestController
@AllArgsConstructor
@RequestMapping("/sysRelationship")
@@ -38,7 +40,7 @@ public class SysRelationshipController {
@PostMapping("/add")
@Operation(summary = "添加", description = "添加一条数据")
@CommonLog(value = "添加", description = "添加一条数据",
- module = SysConfiguration.MODULE_NAME, type = LogTypeEnum.INSERT)
+ module = SysConfiguration.MODULE_NAME, type = LogTypeEnum.INSERT)
public CommonResult add(@Validated @RequestBody SysRelationshipAddParam addParam) {
sysRelationshipService.add(addParam);
return CommonResult.ok();
@@ -60,7 +62,7 @@ public class SysRelationshipController {
@PutMapping("/edit")
@Operation(summary = "修改", description = "修改一条数据")
@CommonLog(value = "修改", description = "修改一条数据",
- module = SysConfiguration.MODULE_NAME, type = LogTypeEnum.UPDATE)
+ module = SysConfiguration.MODULE_NAME, type = LogTypeEnum.UPDATE)
public CommonResult edit(@Validated @RequestBody SysRelationshipEditParam editParam) {
sysRelationshipService.edit(editParam);
return CommonResult.ok();
@@ -69,7 +71,7 @@ public class SysRelationshipController {
@GetMapping("/detail")
@Operation(summary = "详情", description = "查询一条数据的详情")
@CommonLog(value = "详情", description = "查询一条数据的详情",
- module = SysConfiguration.MODULE_NAME, type = LogTypeEnum.SELECT)
+ module = SysConfiguration.MODULE_NAME, type = LogTypeEnum.SELECT)
public CommonResult detail(@Validated SysRelationshipIdParam idParam) {
return CommonResult.ok(sysRelationshipService.detail(idParam));
}
@@ -77,7 +79,7 @@ public class SysRelationshipController {
@GetMapping("/page")
@Operation(summary = "分页查询", description = "查询条件分页查询")
@CommonLog(value = "分页查询", description = "查询条件分页查询",
- module = SysConfiguration.MODULE_NAME, type = LogTypeEnum.SELECT)
+ module = SysConfiguration.MODULE_NAME, type = LogTypeEnum.SELECT)
public CommonResult> page(@Validated SysRelationshipPageParam pageParam) {
return CommonResult.ok(sysRelationshipService.page(pageParam));
}
diff --git a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/enums/SysRelationshipTypeEnum.java b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/enums/SysRelationshipTypeEnum.java
index b9e1baf..ad37c61 100644
--- a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/enums/SysRelationshipTypeEnum.java
+++ b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/enums/SysRelationshipTypeEnum.java
@@ -31,12 +31,7 @@ public enum SysRelationshipTypeEnum {
/**
* 角色与菜单关系(角色拥有那些菜单)
*/
- SYS_ROLE_RELATE_SYS_MENU("角色与菜单关系", "SYS_ROLE_RELATE_SYS_MENU"),
-
-
- MAN("男", "MAN"),
- WOMAN("女", "WOMAN"),
- SECRET("密", "SECRET");
+ SYS_ROLE_RELATE_SYS_MENU("角色与菜单关系", "SYS_ROLE_RELATE_SYS_MENU");
private final String label;
diff --git a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/param/SysRelationshipAddParam.java b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/param/SysRelationshipAddParam.java
index 039154c..8e1eaf4 100644
--- a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/param/SysRelationshipAddParam.java
+++ b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/param/SysRelationshipAddParam.java
@@ -7,14 +7,13 @@ import lombok.NoArgsConstructor;
import java.io.Serializable;
import jakarta.validation.constraints.NotNull;
-import jakarta.validation.constraints.NotBlank;
import top.milkbox.sys.modular.relationship.enums.SysRelationshipTypeEnum;
/**
* 添加参数对象
*
* @author milkbox
- * @date 2024-1-23
+ * @date 2024-1-27
*/
@Data
@NoArgsConstructor
diff --git a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/param/SysRelationshipEditParam.java b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/param/SysRelationshipEditParam.java
index 8ffcd2a..87962cb 100644
--- a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/param/SysRelationshipEditParam.java
+++ b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/param/SysRelationshipEditParam.java
@@ -7,14 +7,13 @@ import lombok.NoArgsConstructor;
import java.io.Serializable;
import jakarta.validation.constraints.NotNull;
-import jakarta.validation.constraints.NotBlank;
import top.milkbox.sys.modular.relationship.enums.SysRelationshipTypeEnum;
/**
* 编辑参数对象
*
* @author milkbox
- * @date 2024-1-23
+ * @date 2024-1-27
*/
@Data
@NoArgsConstructor
diff --git a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/role/controller/SysRoleController.java b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/role/controller/SysRoleController.java
index 3dd34a8..abcf719 100644
--- a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/role/controller/SysRoleController.java
+++ b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/role/controller/SysRoleController.java
@@ -1,5 +1,6 @@
package top.milkbox.sys.modular.role.controller;
+import cn.dev33.satoken.annotation.SaCheckLogin;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -25,8 +26,9 @@ import java.util.List;
* 角色表(sys_role)控制器
*
* @author milkbox
- * @date 2024-1-23
+ * @date 2024-1-27
*/
+@SaCheckLogin
@RestController
@AllArgsConstructor
@RequestMapping("/sysRole")
@@ -38,7 +40,7 @@ public class SysRoleController {
@PostMapping("/add")
@Operation(summary = "添加", description = "添加一条数据")
@CommonLog(value = "添加", description = "添加一条数据",
- module = SysConfiguration.MODULE_NAME, type = LogTypeEnum.INSERT)
+ module = SysConfiguration.MODULE_NAME, type = LogTypeEnum.INSERT)
public CommonResult add(@Validated @RequestBody SysRoleAddParam addParam) {
sysRoleService.add(addParam);
return CommonResult.ok();
@@ -60,7 +62,7 @@ public class SysRoleController {
@PutMapping("/edit")
@Operation(summary = "修改", description = "修改一条数据")
@CommonLog(value = "修改", description = "修改一条数据",
- module = SysConfiguration.MODULE_NAME, type = LogTypeEnum.UPDATE)
+ module = SysConfiguration.MODULE_NAME, type = LogTypeEnum.UPDATE)
public CommonResult edit(@Validated @RequestBody SysRoleEditParam editParam) {
sysRoleService.edit(editParam);
return CommonResult.ok();
@@ -69,7 +71,7 @@ public class SysRoleController {
@GetMapping("/detail")
@Operation(summary = "详情", description = "查询一条数据的详情")
@CommonLog(value = "详情", description = "查询一条数据的详情",
- module = SysConfiguration.MODULE_NAME, type = LogTypeEnum.SELECT)
+ module = SysConfiguration.MODULE_NAME, type = LogTypeEnum.SELECT)
public CommonResult detail(@Validated SysRoleIdParam idParam) {
return CommonResult.ok(sysRoleService.detail(idParam));
}
@@ -77,7 +79,7 @@ public class SysRoleController {
@GetMapping("/page")
@Operation(summary = "分页查询", description = "查询条件分页查询")
@CommonLog(value = "分页查询", description = "查询条件分页查询",
- module = SysConfiguration.MODULE_NAME, type = LogTypeEnum.SELECT)
+ module = SysConfiguration.MODULE_NAME, type = LogTypeEnum.SELECT)
public CommonResult> page(@Validated SysRolePageParam pageParam) {
return CommonResult.ok(sysRoleService.page(pageParam));
}
diff --git a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/controller/SysUserController.java b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/controller/SysUserController.java
index a4a5a83..378e573 100644
--- a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/controller/SysUserController.java
+++ b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/controller/SysUserController.java
@@ -1,20 +1,20 @@
package top.milkbox.sys.modular.user.controller;
+import cn.dev33.satoken.annotation.SaCheckLogin;
+import cn.dev33.satoken.annotation.SaIgnore;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import jakarta.validation.constraints.Size;
import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import top.milkbox.common.annotation.CommonLog;
import top.milkbox.common.enums.LogTypeEnum;
import top.milkbox.sys.core.config.SysConfiguration;
-import top.milkbox.sys.modular.user.param.SysUserAddParam;
-import top.milkbox.sys.modular.user.param.SysUserEditParam;
-import top.milkbox.sys.modular.user.param.SysUserIdParam;
-import top.milkbox.sys.modular.user.param.SysUserPageParam;
+import top.milkbox.sys.modular.user.param.*;
import top.milkbox.sys.modular.user.service.SysUserService;
import top.milkbox.sys.modular.user.vo.SysUserVo;
import top.milkbox.common.pojo.CommonResult;
@@ -27,6 +27,8 @@ import java.util.List;
* @author milkbox
* @date 2024-1-23
*/
+@Slf4j
+@SaCheckLogin
@RestController
@AllArgsConstructor
@RequestMapping("/sysUser")
@@ -38,7 +40,7 @@ public class SysUserController {
@PostMapping("/add")
@Operation(summary = "添加", description = "添加一条数据")
@CommonLog(value = "添加", description = "添加一条数据",
- module = SysConfiguration.MODULE_NAME, type = LogTypeEnum.INSERT)
+ module = SysConfiguration.MODULE_NAME, type = LogTypeEnum.INSERT)
public CommonResult add(@Validated @RequestBody SysUserAddParam addParam) {
sysUserService.add(addParam);
return CommonResult.ok();
@@ -60,7 +62,7 @@ public class SysUserController {
@PutMapping("/edit")
@Operation(summary = "修改", description = "修改一条数据")
@CommonLog(value = "修改", description = "修改一条数据",
- module = SysConfiguration.MODULE_NAME, type = LogTypeEnum.UPDATE)
+ module = SysConfiguration.MODULE_NAME, type = LogTypeEnum.UPDATE)
public CommonResult edit(@Validated @RequestBody SysUserEditParam editParam) {
sysUserService.edit(editParam);
return CommonResult.ok();
@@ -69,7 +71,7 @@ public class SysUserController {
@GetMapping("/detail")
@Operation(summary = "详情", description = "查询一条数据的详情")
@CommonLog(value = "详情", description = "查询一条数据的详情",
- module = SysConfiguration.MODULE_NAME, type = LogTypeEnum.SELECT)
+ module = SysConfiguration.MODULE_NAME, type = LogTypeEnum.SELECT)
public CommonResult detail(@Validated SysUserIdParam idParam) {
return CommonResult.ok(sysUserService.detail(idParam));
}
@@ -77,9 +79,43 @@ public class SysUserController {
@GetMapping("/page")
@Operation(summary = "分页查询", description = "查询条件分页查询")
@CommonLog(value = "分页查询", description = "查询条件分页查询",
- module = SysConfiguration.MODULE_NAME, type = LogTypeEnum.SELECT)
+ module = SysConfiguration.MODULE_NAME, type = LogTypeEnum.SELECT)
public CommonResult> page(@Validated SysUserPageParam pageParam) {
return CommonResult.ok(sysUserService.page(pageParam));
}
+ @SaIgnore
+ @PostMapping("/register")
+ @Operation(summary = "注册")
+ @CommonLog(value = "注册", module = SysConfiguration.MODULE_NAME, type = LogTypeEnum.INSERT,
+ saveParam = false)
+ public CommonResult register(@Validated @RequestBody SysUserRegisterParam registerParam) {
+ return CommonResult.ok("注册成功", sysUserService.register(registerParam));
+ }
+
+ @SaIgnore
+ @PostMapping("/login")
+ @Operation(summary = "登录")
+ @CommonLog(value = "登录", module = SysConfiguration.MODULE_NAME, saveParam = false, saveResult = false)
+ public CommonResult login(@RequestBody SysUserLoginParam loginParam) {
+ return CommonResult.ok("登录成功", sysUserService.login(loginParam));
+ }
+
+ @PostMapping("/getLoginUser")
+ @Operation(summary = "登录用户信息", description = """
+ 获取当前登录用户的信息。
+ 请将token(token的键名称在配置文件中存放)放入cookie中,然后将cookie放入header中然后发送请求。""")
+ @CommonLog(value = "登录用户信息", module = SysConfiguration.MODULE_NAME, type = LogTypeEnum.SELECT,
+ saveResult = false)
+ public CommonResult getLoginUser() {
+ return CommonResult.ok(sysUserService.getLoginUser());
+ }
+
+ @PostMapping("/logout")
+ @Operation(summary = "登出", description = "登出当前用户")
+ @CommonLog(value = "登出", module = SysConfiguration.MODULE_NAME)
+ public CommonResult logout() {
+ sysUserService.logout();
+ return CommonResult.ok("登出成功", null);
+ }
}
\ No newline at end of file
diff --git a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/param/SysUserAddParam.java b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/param/SysUserAddParam.java
index 4ee723a..231ec23 100644
--- a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/param/SysUserAddParam.java
+++ b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/param/SysUserAddParam.java
@@ -1,6 +1,7 @@
package top.milkbox.sys.modular.user.param;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
@@ -28,12 +29,13 @@ public class SysUserAddParam implements Serializable {
description = "登录账号")
private String account;
- /**
- * 登录密码
- */
- @Schema(title = "登录密码",
- description = "登录密码")
- private String password;
+// /**
+// * 登录密码
+// */
+// @Schema(title = "登录密码",
+// description = "登录密码")
+// @NotBlank(message = "登录密码不能为空")
+// private String password;
/**
* 昵称
@@ -84,60 +86,4 @@ public class SysUserAddParam implements Serializable {
description = "用户状态。枚举")
private SysUserStatusEnum status;
- /**
- * 上次登录ip
- */
- @Schema(title = "上次登录ip",
- description = "上次登录ip")
- private String beforeLoginIp;
-
- /**
- * 上次登录地址
- */
- @Schema(title = "上次登录地址",
- description = "上次登录地址")
- private String beforeLoginAddress;
-
- /**
- * 上次登录时间
- */
- @Schema(title = "上次登录时间",
- description = "上次登录时间")
- private Date beforeLoginTime;
-
- /**
- * 上次登录设备
- */
- @Schema(title = "上次登录设备",
- description = "上次登录设备")
- private String beforeLoginDevice;
-
- /**
- * 最新登录ip
- */
- @Schema(title = "最新登录ip",
- description = "最新登录ip")
- private String newLoginIp;
-
- /**
- * 最新登录地址
- */
- @Schema(title = "最新登录地址",
- description = "最新登录地址")
- private String newLoginAddress;
-
- /**
- * 最新登录时间
- */
- @Schema(title = "最新登录时间",
- description = "最新登录时间")
- private Date newLoginTime;
-
- /**
- * 最新登录设备
- */
- @Schema(title = "最新登录设备",
- description = "最新登录设备")
- private String newLoginDevice;
-
}
\ No newline at end of file
diff --git a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/param/SysUserEditParam.java b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/param/SysUserEditParam.java
index 0d05c1d..0109d4f 100644
--- a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/param/SysUserEditParam.java
+++ b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/param/SysUserEditParam.java
@@ -1,6 +1,7 @@
package top.milkbox.sys.modular.user.param;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
@@ -43,6 +44,7 @@ public class SysUserEditParam implements Serializable {
*/
@Schema(title = "登录密码",
description = "登录密码")
+ @NotBlank(message = "登录密码不能为空")
private String password;
/**
diff --git a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/param/SysUserLoginParam.java b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/param/SysUserLoginParam.java
new file mode 100644
index 0000000..64bbb65
--- /dev/null
+++ b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/param/SysUserLoginParam.java
@@ -0,0 +1,38 @@
+package top.milkbox.sys.modular.user.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * 登录参数对象
+ *
+ * @author milkbox
+ * @date 2024-1-24
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class SysUserLoginParam implements Serializable {
+
+ /**
+ * 登录账号
+ */
+ @Schema(title = "登录账号",
+ description = "可以是账号、邮箱或手机号")
+ @NotBlank(message = "账号不能为空")
+ private String account;
+
+ /**
+ * 登录密码
+ */
+ @Schema(title = "登录密码",
+ description = "登录密码")
+ @NotBlank(message = "登录密码不能为空")
+ private String password;
+
+}
\ No newline at end of file
diff --git a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/param/SysUserPageParam.java b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/param/SysUserPageParam.java
index db53220..0643aab 100644
--- a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/param/SysUserPageParam.java
+++ b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/param/SysUserPageParam.java
@@ -31,12 +31,12 @@ public class SysUserPageParam extends CommonPageParam implements Serializable {
description = "登录账号")
private String account;
- /**
- * 登录密码
- */
- @Schema(title = "登录密码",
- description = "登录密码")
- private String password;
+// /**
+// * 登录密码
+// */
+// @Schema(title = "登录密码",
+// description = "登录密码")
+// private String password;
/**
* 昵称
diff --git a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/param/SysUserRegisterParam.java b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/param/SysUserRegisterParam.java
new file mode 100644
index 0000000..da3dbe6
--- /dev/null
+++ b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/param/SysUserRegisterParam.java
@@ -0,0 +1,75 @@
+package top.milkbox.sys.modular.user.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import top.milkbox.sys.modular.user.enums.SysUserGenderEnum;
+import top.milkbox.sys.modular.user.enums.SysUserStatusEnum;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 注册参数对象
+ *
+ * @author milkbox
+ * @date 2024-1-24
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class SysUserRegisterParam implements Serializable {
+
+ /**
+ * 登录账号
+ */
+ @Schema(title = "登录账号",
+ description = "登录账号")
+ private String account;
+
+ /**
+ * 登录密码
+ */
+ @Schema(title = "登录密码",
+ description = "登录密码")
+ @NotBlank(message = "登录密码不能为空")
+ private String password;
+
+ /**
+ * 昵称
+ */
+ @Schema(title = "昵称",
+ description = "昵称")
+ private String nickname;
+
+ /**
+ * 登录邮箱
+ */
+ @Schema(title = "登录邮箱",
+ description = "登录邮箱")
+ private String email;
+
+ /**
+ * 登录手机号
+ */
+ @Schema(title = "登录手机号",
+ description = "登录手机号")
+ private String phone;
+
+ /**
+ * 头像;base64格式
+ */
+ @Schema(title = "头像",
+ description = "头像。base64格式")
+ private String avatar;
+
+ /**
+ * 性别;枚举
+ */
+ @Schema(title = "性别",
+ description = "性别。枚举")
+ private SysUserGenderEnum gender;
+
+}
\ No newline at end of file
diff --git a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/service/SysUserService.java b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/service/SysUserService.java
index 8bccbdb..ba8a8f0 100644
--- a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/service/SysUserService.java
+++ b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/service/SysUserService.java
@@ -3,10 +3,7 @@ package top.milkbox.sys.modular.user.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import top.milkbox.sys.modular.user.entity.SysUserEntity;
-import top.milkbox.sys.modular.user.param.SysUserAddParam;
-import top.milkbox.sys.modular.user.param.SysUserEditParam;
-import top.milkbox.sys.modular.user.param.SysUserIdParam;
-import top.milkbox.sys.modular.user.param.SysUserPageParam;
+import top.milkbox.sys.modular.user.param.*;
import top.milkbox.sys.modular.user.vo.SysUserVo;
import java.util.List;
@@ -64,4 +61,39 @@ public interface SysUserService extends IService {
*/
Page page(SysUserPageParam pageParam);
+ /**
+ * 通过账号、邮箱或手机号查询用户
+ *
+ * @param keyword 可以是账号、邮箱或手机号
+ * @return 返回查询到的用户信息,如果没有查询到则返回空
+ */
+ SysUserEntity findByAccountKeyword(String keyword);
+
+ /**
+ * 注册
+ *
+ * @param registerParam 注册参数
+ * @return 返回注册用户的部分信息
+ */
+ SysUserVo register(SysUserRegisterParam registerParam);
+
+ /**
+ * 登录
+ *
+ * @param loginParam 登录参数
+ * @return 返回登录用户的token以及部分用户信息
+ */
+ SysUserVo login(SysUserLoginParam loginParam);
+
+ /**
+ * 获取当前登录的用户信息
+ *
+ * @return 用户信息,如果用户未登录则返回空
+ */
+ SysUserVo getLoginUser();
+
+ /**
+ * 登出当前用户
+ */
+ void logout();
}
\ No newline at end of file
diff --git a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/service/impl/SysUserServiceImpl.java b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/service/impl/SysUserServiceImpl.java
index 09c15a6..d1f084e 100644
--- a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/service/impl/SysUserServiceImpl.java
+++ b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/service/impl/SysUserServiceImpl.java
@@ -1,8 +1,11 @@
package top.milkbox.sys.modular.user.service.impl;
+import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
+import cn.hutool.crypto.digest.BCrypt;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -12,11 +15,10 @@ import org.springframework.stereotype.Service;
import top.milkbox.common.enums.CommonSortTypeEnum;
import top.milkbox.common.exceprion.CommonServiceException;
import top.milkbox.sys.modular.user.entity.SysUserEntity;
+import top.milkbox.sys.modular.user.enums.SysUserGenderEnum;
+import top.milkbox.sys.modular.user.enums.SysUserStatusEnum;
import top.milkbox.sys.modular.user.mapper.SysUserMapper;
-import top.milkbox.sys.modular.user.param.SysUserAddParam;
-import top.milkbox.sys.modular.user.param.SysUserEditParam;
-import top.milkbox.sys.modular.user.param.SysUserIdParam;
-import top.milkbox.sys.modular.user.param.SysUserPageParam;
+import top.milkbox.sys.modular.user.param.*;
import top.milkbox.sys.modular.user.service.SysUserService;
import top.milkbox.sys.modular.user.vo.SysUserVo;
import top.milkbox.common.utils.CommonUtil;
@@ -36,6 +38,8 @@ public class SysUserServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(SysUserEntity::getAccount, account)
+ .or().eq(SysUserEntity::getEmail, email)
+ .or().eq(SysUserEntity::getPhone, phone);
+ return super.getOne(queryWrapper);
+ }
+
+ @Override
+ public SysUserVo register(SysUserRegisterParam registerParam) {
+ // 校验用户名、邮箱和手机号不能重复
+ SysUserEntity existUser = findByAccountKeyword(
+ registerParam.getAccount(), registerParam.getEmail(), registerParam.getPhone());
+ if (ObjectUtil.isNotNull(existUser)) {
+ throw new CommonServiceException("账号、邮箱或手机号已经被注册过了!");
+ }
+
+ SysUserEntity user = BeanUtil.toBean(registerParam, SysUserEntity.class);
+ // 生成密码的hash值
+ String hashPassword = BCrypt.hashpw(user.getPassword(), BCrypt.gensalt(LOG_ROUNDS));
+ user.setPassword(hashPassword);
+ initUser(user);
+ super.save(user);
+
+ return BeanUtil.toBean(user, SysUserVo.class);
+ }
+
+ /**
+ * 初始化用户
+ *
+ * @param user 用户
+ */
+ private void initUser(SysUserEntity user) {
+ if (ObjectUtil.isNotNull(user.getGender())) {
+ user.setGender(SysUserGenderEnum.SECRET);
+ }
+ // TODO 此处可能会处理用户密级
+ user.setStatus(SysUserStatusEnum.NORMAL);
+ }
+
+ @Override
+ public SysUserVo login(SysUserLoginParam loginParam) {
+ // 根据账号、邮箱和手机号查询用户信息
+ SysUserEntity user = findByAccountKeyword(loginParam.getAccount());
+ if (ObjectUtil.isNull(user)) {
+ throw new CommonServiceException("用户不存在");
+ }
+
+ // 验证用户密码是否正确
+ if (!BCrypt.checkpw(loginParam.getPassword(), user.getPassword())) {
+ throw new CommonServiceException("用户密码错误");
+ }
+
+ // sa-token操作
+ StpUtil.login(user.getId());
+
+ // 最后需要将token放到vo对象中
+ SysUserVo vo = BeanUtil.toBean(user, SysUserVo.class);
+ vo.setToken(StpUtil.getTokenValue());
+
+ return vo;
+ }
+
+ @Override
+ public SysUserVo getLoginUser() {
+ return detail(new SysUserIdParam(StpUtil.getLoginIdAsInt()));
+ }
+
+ @Override
+ public void logout() {
+ StpUtil.logout();
+ }
}
\ No newline at end of file
diff --git a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/vo/SysUserVo.java b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/vo/SysUserVo.java
index 72e62b2..796829d 100644
--- a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/vo/SysUserVo.java
+++ b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/vo/SysUserVo.java
@@ -39,12 +39,12 @@ public class SysUserVo extends CommonVo implements Serializable {
description = "登录账号")
private String account;
- /**
- * 登录密码
- */
- @Schema(title = "登录密码",
- description = "登录密码")
- private String password;
+// /**
+// * 登录密码
+// */
+// @Schema(title = "登录密码",
+// description = "登录密码")
+// private String password;
/**
* 昵称
@@ -151,4 +151,11 @@ public class SysUserVo extends CommonVo implements Serializable {
description = "最新登录设备")
private String newLoginDevice;
+ /**
+ * 默认情况下登录后用户的token会自动存入浏览器的cookie中,无需单独控制
+ * 如果涉及到app或小程序等前后端分离的情况,可能就要手动存储这个字段了
+ */
+ @Schema(title = "用户当前登录的token", description = "用户当前登录的token")
+ private String token;
+
}
\ No newline at end of file
--
Gitee