From d4214d72d34c2d4c93935d106b30cb6b9d0bbb58 Mon Sep 17 00:00:00 2001
From: Bunny <1319900154@qq.com>
Date: Thu, 10 Jul 2025 12:09:55 +0800
Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E6=B7=BB=E5=8A=A0=E9=85=8D?=
=?UTF-8?q?=E7=BD=AE=E4=BF=A1=E6=81=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
spring-security/pom.xml | 20 ++
.../spring/domain/vo/result/PageResult.java | 34 ++++
.../com/spring/domain/vo/result/Result.java | 173 ++++++++++++++++++
.../domain/vo/result/ResultCodeEnum.java | 90 +++++++++
.../src/main/resources/application-dev.yml | 7 +
.../src/main/resources/application.yml | 22 +++
.../src/main/resources/logback.xml | 72 ++++++++
7 files changed, 418 insertions(+)
create mode 100644 spring-security/src/main/java/com/spring/domain/vo/result/PageResult.java
create mode 100644 spring-security/src/main/java/com/spring/domain/vo/result/Result.java
create mode 100644 spring-security/src/main/java/com/spring/domain/vo/result/ResultCodeEnum.java
create mode 100644 spring-security/src/main/resources/application-dev.yml
create mode 100644 spring-security/src/main/resources/logback.xml
diff --git a/spring-security/pom.xml b/spring-security/pom.xml
index 9e370ca..ea23d4a 100644
--- a/spring-security/pom.xml
+++ b/spring-security/pom.xml
@@ -31,6 +31,9 @@
17
17
17
+ 9.2.0
+ 6.2.1
+ 3.5.6
4.5.0
5.15.4
5.1.3
@@ -68,6 +71,23 @@
runtime
+
+
+ com.baomidou
+ mybatis-plus-spring-boot3-starter
+ ${mybatis-plus.version}
+
+
+ com.mysql
+ mysql-connector-j
+ ${mysql.version}
+
+
+ com.zaxxer
+ HikariCP
+ ${HikariCP.version}
+
+
com.alibaba.fastjson2
fastjson2
diff --git a/spring-security/src/main/java/com/spring/domain/vo/result/PageResult.java b/spring-security/src/main/java/com/spring/domain/vo/result/PageResult.java
new file mode 100644
index 0000000..d192789
--- /dev/null
+++ b/spring-security/src/main/java/com/spring/domain/vo/result/PageResult.java
@@ -0,0 +1,34 @@
+package com.spring.domain.vo.result;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 封装分页查询结果
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@Schema(name = "PageResult 对象", title = "分页返回结果", description = "分页返回结果")
+public class PageResult implements Serializable {
+
+ @Schema(name = "pageNo", title = "当前页")
+ private Long pageNo;
+
+ @Schema(name = "pageSize", title = "每页记录数")
+ private Long pageSize;
+
+ @Schema(name = "total", title = "总记录数")
+ private Long total;
+
+ @Schema(name = "list", title = "当前页数据集合")
+ private List list;
+
+}
\ No newline at end of file
diff --git a/spring-security/src/main/java/com/spring/domain/vo/result/Result.java b/spring-security/src/main/java/com/spring/domain/vo/result/Result.java
new file mode 100644
index 0000000..49a353d
--- /dev/null
+++ b/spring-security/src/main/java/com/spring/domain/vo/result/Result.java
@@ -0,0 +1,173 @@
+package com.spring.domain.vo.result;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Result {
+ // 状态码
+ private Integer code;
+ // 返回消息
+ private String message;
+ // 返回数据
+ private T data;
+
+ /**
+ * * 自定义返回体
+ *
+ * @param data 返回体
+ * @return Result
+ */
+ protected static Result build(T data) {
+ Result result = new Result<>();
+ result.setData(data);
+ return result;
+ }
+
+ /**
+ * * 自定义返回体,使用ResultCodeEnum构建
+ *
+ * @param body 返回体
+ * @param codeEnum 返回状态码
+ * @return Result
+ */
+ public static Result build(T body, ResultCodeEnum codeEnum) {
+ Result result = build(body);
+ result.setCode(codeEnum.getCode());
+ result.setMessage(codeEnum.getMessage());
+ return result;
+ }
+
+ /**
+ * * 自定义返回体
+ *
+ * @param body 返回体
+ * @param code 返回状态码
+ * @param message 返回消息
+ * @return Result
+ */
+ public static Result build(T body, Integer code, String message) {
+ Result result = build(body);
+ result.setCode(code);
+ result.setMessage(message);
+ result.setData(null);
+ return result;
+ }
+
+ /**
+ * * 操作成功
+ *
+ * @return Result
+ */
+ public static Result success() {
+ return success(null, ResultCodeEnum.SUCCESS);
+ }
+
+ /**
+ * * 操作成功
+ *
+ * @param data baseCategory1List
+ */
+ public static Result success(T data) {
+ return build(data, ResultCodeEnum.SUCCESS);
+ }
+
+ /**
+ * * 操作成功-状态码
+ *
+ * @param codeEnum 状态码
+ */
+ public static Result success(ResultCodeEnum codeEnum) {
+ return success(null, codeEnum);
+ }
+
+ /**
+ * * 操作成功-自定义返回数据和状态码
+ *
+ * @param data 返回体
+ * @param codeEnum 状态码
+ */
+ public static Result success(T data, ResultCodeEnum codeEnum) {
+ return build(data, codeEnum);
+ }
+
+ /**
+ * * 操作失败-自定义返回数据和状态码
+ *
+ * @param data 返回体
+ * @param message 错误信息
+ */
+ public static Result success(T data, String message) {
+ return build(data, 200, message);
+ }
+
+ /**
+ * * 操作失败-自定义返回数据和状态码
+ *
+ * @param data 返回体
+ * @param code 状态码
+ * @param message 错误信息
+ */
+ public static Result success(T data, Integer code, String message) {
+ return build(data, code, message);
+ }
+
+ /**
+ * * 操作失败
+ */
+ public static Result error() {
+ return Result.build(null);
+ }
+
+ /**
+ * * 操作失败-自定义返回数据
+ *
+ * @param data 返回体
+ */
+ public static Result error(T data) {
+ return build(data, ResultCodeEnum.FAIL);
+ }
+
+ /**
+ * * 操作失败-状态码
+ *
+ * @param codeEnum 状态码
+ */
+ public static Result error(ResultCodeEnum codeEnum) {
+ return build(null, codeEnum);
+ }
+
+ /**
+ * * 操作失败-自定义返回数据和状态码
+ *
+ * @param data 返回体
+ * @param codeEnum 状态码
+ */
+ public static Result error(T data, ResultCodeEnum codeEnum) {
+ return build(data, codeEnum);
+ }
+
+ /**
+ * * 操作失败-自定义返回数据和状态码
+ *
+ * @param data 返回体
+ * @param code 状态码
+ * @param message 错误信息
+ */
+ public static Result error(T data, Integer code, String message) {
+ return build(data, code, message);
+ }
+
+ /**
+ * * 操作失败-自定义返回数据和状态码
+ *
+ * @param data 返回体
+ * @param message 错误信息
+ */
+ public static Result error(T data, String message) {
+ return build(null, 500, message);
+ }
+}
diff --git a/spring-security/src/main/java/com/spring/domain/vo/result/ResultCodeEnum.java b/spring-security/src/main/java/com/spring/domain/vo/result/ResultCodeEnum.java
new file mode 100644
index 0000000..af3ffaf
--- /dev/null
+++ b/spring-security/src/main/java/com/spring/domain/vo/result/ResultCodeEnum.java
@@ -0,0 +1,90 @@
+package com.spring.domain.vo.result;
+
+import lombok.Getter;
+
+/**
+ * 统一返回结果状态信息类
+ */
+@Getter
+public enum ResultCodeEnum {
+ // 成功操作 200
+ SUCCESS(200, "操作成功"),
+ LOAD_FINISHED(200, "加载完成"),
+ ADD_SUCCESS(200, "添加成功"),
+ UPDATE_SUCCESS(200, "修改成功"),
+ DELETE_SUCCESS(200, "删除成功"),
+ SORT_SUCCESS(200, "排序成功"),
+ SUCCESS_UPLOAD(200, "上传成功"),
+ SUCCESS_LOGOUT(200, "退出成功"),
+ EMAIL_CODE_REFRESH(200, "邮箱验证码已刷新"),
+ EMAIL_CODE_SEND_SUCCESS(200, "邮箱验证码已发送"),
+
+ // 验证错误 201
+ USERNAME_OR_PASSWORD_NOT_EMPTY(201, "用户名或密码不能为空"),
+ EMAIL_CODE_NOT_EMPTY(201, "邮箱验证码不能为空"),
+ SEND_EMAIL_CODE_NOT_EMPTY(201, "请先发送邮箱验证码"),
+ EMAIL_CODE_NOT_MATCHING(201, "邮箱验证码不匹配"),
+ LOGIN_ERROR(500, "账号或密码错误"),
+ LOGIN_ERROR_USERNAME_PASSWORD_NOT_EMPTY(201, "登录信息不能为空"),
+ GET_BUCKET_EXCEPTION(201, "获取文件信息失败"),
+ SEND_MAIL_CODE_ERROR(201, "邮件发送失败"),
+ EMAIL_CODE_EMPTY(201, "邮箱验证码过期或不存在"),
+ EMAIL_EXIST(201, "邮箱已存在"),
+ REQUEST_IS_EMPTY(201, "请求数据为空"),
+ DATA_TOO_LARGE(201, "请求数据为空"),
+ UPDATE_NEW_PASSWORD_SAME_AS_OLD_PASSWORD(201, "新密码与密码相同"),
+
+ // 数据相关 206
+ ILLEGAL_REQUEST(206, "非法请求"),
+ REPEAT_SUBMIT(206, "重复提交"),
+ DATA_ERROR(206, "数据异常"),
+ EMAIL_USER_TEMPLATE_IS_EMPTY(206, "邮件模板为空"),
+ EMAIL_TEMPLATE_IS_EMPTY(206, "邮件模板为空"),
+ EMAIL_USER_IS_EMPTY(206, "关联邮件用户配置为空"),
+ DATA_EXIST(206, "数据已存在"),
+ DATA_NOT_EXIST(206, "数据不存在"),
+ ALREADY_USER_EXCEPTION(206, "用户已存在"),
+ USER_IS_EMPTY(206, "用户不存在"),
+ FILE_NOT_EXIST(206, "文件不存在"),
+ NEW_PASSWORD_SAME_OLD_PASSWORD(206, "新密码不能和旧密码相同"),
+ MISSING_TEMPLATE_FILES(206, "缺少模板文件"),
+
+ // 身份过期 208
+ LOGIN_AUTH(208, "请先登陆"),
+ AUTHENTICATION_EXPIRED(208, "身份验证过期"),
+ SESSION_EXPIRATION(208, "会话过期"),
+
+ // 209
+ THE_SAME_USER_HAS_LOGGED_IN(209, "相同用户已登录"),
+
+ // 提示错误
+ UPDATE_ERROR(216, "修改失败"),
+ URL_ENCODE_ERROR(216, "URL编码失败"),
+ ILLEGAL_CALLBACK_REQUEST_ERROR(217, "非法回调请求"),
+ FETCH_USERINFO_ERROR(219, "获取用户信息失败"),
+ ILLEGAL_DATA_REQUEST(219, "非法数据请求"),
+ CLASS_NOT_FOUND(219, "类名不存在"),
+ ADMIN_ROLE_CAN_NOT_DELETED(219, "无法删除admin角色"),
+ ROUTER_RANK_NEED_LARGER_THAN_THE_PARENT(219, "设置路由等级需要大于或等于父级的路由等级"),
+
+ // 无权访问 403
+ FAIL_NO_ACCESS_DENIED(403, "无权访问"),
+ FAIL_NO_ACCESS_DENIED_USER_OFFLINE(403, "用户强制下线"),
+ TOKEN_PARSING_FAILED(403, "token解析失败"),
+ FAIL_NO_ACCESS_DENIED_USER_LOCKED(403, "该账户已封禁"),
+
+ // 系统错误 500
+ UNKNOWN_EXCEPTION(500, "服务异常"),
+ SERVICE_ERROR(500, "服务异常"),
+ UPLOAD_ERROR(500, "上传失败"),
+ FAIL(500, "失败"),
+ ;
+
+ private final Integer code;
+ private final String message;
+
+ ResultCodeEnum(Integer code, String message) {
+ this.code = code;
+ this.message = message;
+ }
+}
\ No newline at end of file
diff --git a/spring-security/src/main/resources/application-dev.yml b/spring-security/src/main/resources/application-dev.yml
new file mode 100644
index 0000000..833b8ce
--- /dev/null
+++ b/spring-security/src/main/resources/application-dev.yml
@@ -0,0 +1,7 @@
+bunny:
+ master:
+ host: rm-bp12z6hlv46vi6g8mro.mysql.rds.aliyuncs.com
+ port: 3306
+ database: bunny_test
+ username: bunny_test
+ password: "Test1234"
\ No newline at end of file
diff --git a/spring-security/src/main/resources/application.yml b/spring-security/src/main/resources/application.yml
index 8420b83..1f8c943 100644
--- a/spring-security/src/main/resources/application.yml
+++ b/spring-security/src/main/resources/application.yml
@@ -4,7 +4,29 @@ server:
spring:
application:
name: spring-security
+ profiles:
+ active: dev
+ datasource:
+ type: com.zaxxer.hikari.HikariDataSource
+ driver-class-name: com.mysql.cj.jdbc.Driver
+ url: jdbc:mysql://${bunny.master.host}:${bunny.master.port}/${bunny.master.database}?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true
+ username: ${bunny.master.username}
+ password: ${bunny.master.password}
+ hikari:
+ maximum-pool-size: 20
+ connection-timeout: 30000
+
+ jackson:
+ date-format: yyyy-MM-dd HH:mm:ss
+
+mybatis-plus:
+ mapper-locations: classpath:/mapper/*.xml
+ global-config:
+ db-config:
+ id-type: auto
+ logic-delete-value: 1
+ logic-not-delete-value: 0
logging:
level:
diff --git a/spring-security/src/main/resources/logback.xml b/spring-security/src/main/resources/logback.xml
new file mode 100644
index 0000000..02b7abe
--- /dev/null
+++ b/spring-security/src/main/resources/logback.xml
@@ -0,0 +1,72 @@
+
+
+ logback
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DEBUG
+
+
+
+ %cyan([%thread %d{yyyy-MM-dd HH:mm:ss}]) %yellow(%-5level) %green(%logger{100}).%boldRed(%method)-%boldMagenta(%line)-%blue(%msg%n)
+
+ ${ENCODING}
+
+
+
+
+
+ logs/${APP_NAME}/${datetime}.log
+ true
+
+ %date{yyyy-MM-dd HH:mm:ss} [%-5level] %thread %file:%line %logger %msg%n
+ ${ENCODING}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file