From 05535f66d012ff0432b014e7bdd0f4c82aace24f Mon Sep 17 00:00:00 2001
From: bunny <1319900154@qq.com>
Date: Fri, 24 May 2024 14:21:00 +0800
Subject: [PATCH] =?UTF-8?q?feat(=E4=BF=AE=E6=94=B9):=20:rocket:=20?=
=?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=A7=86=E5=9B=BE=E6=A8=A1=E5=9E=8B=E4=BD=8D?=
=?UTF-8?q?=E7=BD=AE=E4=BB=A5=E5=8F=8A=E5=8F=AF=E4=BB=A5=E4=BD=BF=E7=94=A8?=
=?UTF-8?q?Web=E8=87=AA=E5=B8=A6=E6=8B=A6=E6=88=AA=E5=99=A8=EF=BC=8C?=
=?UTF-8?q?=E5=8F=AF=E4=BB=A5=E9=80=89=E6=8B=A9=E6=80=A7=E4=BD=BF=E7=94=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
common/common-utils/pom.xml | 2 +-
.../cn/bunny/common/utils/CommentUtil.java | 51 ------------------
.../java/cn/bunny/common/utils/FileUtil.java | 3 ++
common/service-utils/pom.xml | 2 +-
.../service/config/WebMvcConfiguration.java | 38 +++++++++++++
.../service/exception/BunnyException.java | 2 +-
.../exception/GlobalExceptionHandler.java | 6 +--
.../interceptor/UserTokenInterceptor.java | 54 +++++++++++++++++++
.../common/service/utils/ResponseUtil.java | 2 +-
{model => dao}/pom.xml | 2 +-
.../bunny/dto/article/LoadArticleListDto.java | 0
.../bunny/dto/article/LoadUserArticleDto.java | 0
.../cn/bunny/dto/common/CommentPostDto.java | 0
.../cn/bunny/dto/common/CommentQueryDto.java | 0
.../cn/bunny/dto/common/QueryTopTypeDto.java | 0
.../cn/bunny/dto/email/EmailTemplateDto.java | 0
.../cn/bunny/dto/email/EmailUsersDto.java | 0
.../main/java/cn/bunny/dto/user/LoginDto.java | 0
.../java/cn/bunny/dto/user/RegisterDto.java | 0
.../java/cn/bunny/dto/user/ResetPwdDto.java | 0
.../java/cn/bunny/dto/user/UserInfoDto.java | 0
.../bunny/dto/user/UserIntegralRecordDto.java | 0
.../cn/bunny/dto/user/UserMessageDto.java | 0
.../java/cn/bunny/entity/base/BaseEntity.java | 0
.../bunny/entity/system/admin/AdminPower.java | 0
.../bunny/entity/system/admin/AdminRole.java | 0
.../entity/system/admin/AdminRolePower.java | 0
.../entity/system/admin/AdminUserRole.java | 0
.../system/admin/auth/AuthUserRole.java | 0
.../bunny/entity/system/article/Article.java | 0
.../entity/system/article/ForumComment.java | 0
.../entity/system/article/IntegralRecord.java | 0
.../entity/system/article/LikeRecord.java | 0
.../bunny/entity/system/board/ForumBoard.java | 0
.../bunny/entity/system/email/EmailSend.java | 0
.../entity/system/email/EmailSendInit.java | 0
.../entity/system/email/EmailTemplate.java | 0
.../bunny/entity/system/email/EmailUsers.java | 0
.../cn/bunny/entity/system/file/Files.java | 0
.../cn/bunny/entity/system/user/User.java | 0
.../bunny/entity/system/user/UserMessage.java | 0
.../cn/bunny/pojo}/enums/OperationType.java | 2 +-
.../java/cn/bunny/pojo}/result/Result.java | 2 +-
.../cn/bunny/pojo}/result/ResultCodeEnum.java | 2 +-
.../result/constant/ExceptionConstant.java | 2 +-
.../result/constant/FileMessageConstant.java | 2 +-
.../constant/LocalDateTimeConstant.java | 2 +-
.../result/constant/MailMessageConstant.java | 2 +-
.../result/constant/RedisUserConstant.java | 2 +-
.../result/constant/SQLAutoFillConstant.java | 2 +-
.../result/constant/SecurityConstant.java | 2 +-
.../pojo}/result/constant/StatusConstant.java | 2 +-
.../pojo}/result/constant/UserConstant.java | 2 +-
.../cn/bunny/pojo}/tree/AbstractTreeNode.java | 2 +-
.../java/cn/bunny/pojo}/tree/TreeBuilder.java | 2 +-
.../cn/bunny/vo/email/EmailTemplateVo.java | 0
.../java/cn/bunny/vo/file/FileInfoVo.java | 0
.../java/cn/bunny/vo/page/PageResult.java | 0
.../vo/system/article/ForumArticleVo.java | 0
.../bunny/vo/system/board/ForumBoardVo.java | 2 +-
.../cn/bunny/vo/system/comment/CommentVo.java | 0
.../cn/bunny/vo/system/login/LoginVo.java | 2 +-
.../bunny/vo/system/login/ValidateCodeVo.java | 0
.../cn/bunny/vo/system/user/UserInfoVo.java | 2 +-
.../vo/system/user/UserIntegralRecordVo.java | 0
.../vo/system/user/UserMessageCountVo.java | 0
.../bunny/vo/system/user/UserMessageVo.java | 0
.../module/mail/utils/MailSendCheckUtil.java | 2 +-
.../bunny/module/minio/utils/MinioUtil.java | 2 +-
module/pom.xml | 1 +
.../filter/TokenAuthenticationFilter.java | 6 +--
.../filter/TokenLoginFilterService.java | 6 +--
.../handelr/SecurityAccessDeniedHandler.java | 4 +-
.../SecurityAuthenticationEntryPoint.java | 4 +-
.../SecurityAuthenticationFailureHandler.java | 2 +-
.../SecurityAuthenticationSuccessHandler.java | 2 +-
pom.xml | 2 +-
.../service/aop/annotation/AutoFill.java | 2 +-
.../service/controller/LoginController.java | 2 +-
...CustomAuthorizationManagerServiceImpl.java | 48 ++++++++++++++---
.../security/CustomUserDetailsService.java | 6 +--
.../service/service/impl/UserServiceImpl.java | 6 +--
82 files changed, 186 insertions(+), 105 deletions(-)
delete mode 100644 common/common-utils/src/main/java/cn/bunny/common/utils/CommentUtil.java
create mode 100644 common/service-utils/src/main/java/cn/bunny/common/service/config/WebMvcConfiguration.java
create mode 100644 common/service-utils/src/main/java/cn/bunny/common/service/interceptor/UserTokenInterceptor.java
rename {model => dao}/pom.xml (98%)
rename {model => dao}/src/main/java/cn/bunny/dto/article/LoadArticleListDto.java (100%)
rename {model => dao}/src/main/java/cn/bunny/dto/article/LoadUserArticleDto.java (100%)
rename {model => dao}/src/main/java/cn/bunny/dto/common/CommentPostDto.java (100%)
rename {model => dao}/src/main/java/cn/bunny/dto/common/CommentQueryDto.java (100%)
rename {model => dao}/src/main/java/cn/bunny/dto/common/QueryTopTypeDto.java (100%)
rename {model => dao}/src/main/java/cn/bunny/dto/email/EmailTemplateDto.java (100%)
rename {model => dao}/src/main/java/cn/bunny/dto/email/EmailUsersDto.java (100%)
rename {model => dao}/src/main/java/cn/bunny/dto/user/LoginDto.java (100%)
rename {model => dao}/src/main/java/cn/bunny/dto/user/RegisterDto.java (100%)
rename {model => dao}/src/main/java/cn/bunny/dto/user/ResetPwdDto.java (100%)
rename {model => dao}/src/main/java/cn/bunny/dto/user/UserInfoDto.java (100%)
rename {model => dao}/src/main/java/cn/bunny/dto/user/UserIntegralRecordDto.java (100%)
rename {model => dao}/src/main/java/cn/bunny/dto/user/UserMessageDto.java (100%)
rename {model => dao}/src/main/java/cn/bunny/entity/base/BaseEntity.java (100%)
rename {model => dao}/src/main/java/cn/bunny/entity/system/admin/AdminPower.java (100%)
rename {model => dao}/src/main/java/cn/bunny/entity/system/admin/AdminRole.java (100%)
rename {model => dao}/src/main/java/cn/bunny/entity/system/admin/AdminRolePower.java (100%)
rename {model => dao}/src/main/java/cn/bunny/entity/system/admin/AdminUserRole.java (100%)
rename {model => dao}/src/main/java/cn/bunny/entity/system/admin/auth/AuthUserRole.java (100%)
rename {model => dao}/src/main/java/cn/bunny/entity/system/article/Article.java (100%)
rename {model => dao}/src/main/java/cn/bunny/entity/system/article/ForumComment.java (100%)
rename {model => dao}/src/main/java/cn/bunny/entity/system/article/IntegralRecord.java (100%)
rename {model => dao}/src/main/java/cn/bunny/entity/system/article/LikeRecord.java (100%)
rename {model => dao}/src/main/java/cn/bunny/entity/system/board/ForumBoard.java (100%)
rename {model => dao}/src/main/java/cn/bunny/entity/system/email/EmailSend.java (100%)
rename {model => dao}/src/main/java/cn/bunny/entity/system/email/EmailSendInit.java (100%)
rename {model => dao}/src/main/java/cn/bunny/entity/system/email/EmailTemplate.java (100%)
rename {model => dao}/src/main/java/cn/bunny/entity/system/email/EmailUsers.java (100%)
rename {model => dao}/src/main/java/cn/bunny/entity/system/file/Files.java (100%)
rename {model => dao}/src/main/java/cn/bunny/entity/system/user/User.java (100%)
rename {model => dao}/src/main/java/cn/bunny/entity/system/user/UserMessage.java (100%)
rename {model/src/main/java/cn/bunny => dao/src/main/java/cn/bunny/pojo}/enums/OperationType.java (74%)
rename {model/src/main/java/cn/bunny => dao/src/main/java/cn/bunny/pojo}/result/Result.java (99%)
rename {model/src/main/java/cn/bunny => dao/src/main/java/cn/bunny/pojo}/result/ResultCodeEnum.java (98%)
rename {model/src/main/java/cn/bunny => dao/src/main/java/cn/bunny/pojo}/result/constant/ExceptionConstant.java (98%)
rename {model/src/main/java/cn/bunny => dao/src/main/java/cn/bunny/pojo}/result/constant/FileMessageConstant.java (96%)
rename {model/src/main/java/cn/bunny => dao/src/main/java/cn/bunny/pojo}/result/constant/LocalDateTimeConstant.java (90%)
rename {model/src/main/java/cn/bunny => dao/src/main/java/cn/bunny/pojo}/result/constant/MailMessageConstant.java (92%)
rename {model/src/main/java/cn/bunny => dao/src/main/java/cn/bunny/pojo}/result/constant/RedisUserConstant.java (97%)
rename {model/src/main/java/cn/bunny => dao/src/main/java/cn/bunny/pojo}/result/constant/SQLAutoFillConstant.java (90%)
rename {model/src/main/java/cn/bunny => dao/src/main/java/cn/bunny/pojo}/result/constant/SecurityConstant.java (91%)
rename {model/src/main/java/cn/bunny => dao/src/main/java/cn/bunny/pojo}/result/constant/StatusConstant.java (85%)
rename {model/src/main/java/cn/bunny => dao/src/main/java/cn/bunny/pojo}/result/constant/UserConstant.java (85%)
rename {model/src/main/java/cn/bunny => dao/src/main/java/cn/bunny/pojo}/tree/AbstractTreeNode.java (86%)
rename {model/src/main/java/cn/bunny => dao/src/main/java/cn/bunny/pojo}/tree/TreeBuilder.java (96%)
rename {model => dao}/src/main/java/cn/bunny/vo/email/EmailTemplateVo.java (100%)
rename {model => dao}/src/main/java/cn/bunny/vo/file/FileInfoVo.java (100%)
rename {model => dao}/src/main/java/cn/bunny/vo/page/PageResult.java (100%)
rename {model => dao}/src/main/java/cn/bunny/vo/system/article/ForumArticleVo.java (100%)
rename {model => dao}/src/main/java/cn/bunny/vo/system/board/ForumBoardVo.java (93%)
rename {model => dao}/src/main/java/cn/bunny/vo/system/comment/CommentVo.java (100%)
rename {model => dao}/src/main/java/cn/bunny/vo/system/login/LoginVo.java (96%)
rename {model => dao}/src/main/java/cn/bunny/vo/system/login/ValidateCodeVo.java (100%)
rename {model => dao}/src/main/java/cn/bunny/vo/system/user/UserInfoVo.java (96%)
rename {model => dao}/src/main/java/cn/bunny/vo/system/user/UserIntegralRecordVo.java (100%)
rename {model => dao}/src/main/java/cn/bunny/vo/system/user/UserMessageCountVo.java (100%)
rename {model => dao}/src/main/java/cn/bunny/vo/system/user/UserMessageVo.java (100%)
diff --git a/common/common-utils/pom.xml b/common/common-utils/pom.xml
index f832c59..943745a 100644
--- a/common/common-utils/pom.xml
+++ b/common/common-utils/pom.xml
@@ -20,7 +20,7 @@
cn.bunny
- model
+ dao
0.0.1-SNAPSHOT
diff --git a/common/common-utils/src/main/java/cn/bunny/common/utils/CommentUtil.java b/common/common-utils/src/main/java/cn/bunny/common/utils/CommentUtil.java
deleted file mode 100644
index b733f66..0000000
--- a/common/common-utils/src/main/java/cn/bunny/common/utils/CommentUtil.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package cn.bunny.common.utils;
-
-import cn.bunny.vo.system.comment.CommentVo;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class CommentUtil {
- /**
- * 构建树型结构
- *
- * @param commentList 评论列表
- * @return 结构列表
- */
- public static List buildTree(List commentList) {
- // 构建树形结构
- List tree = new ArrayList<>();
- // 遍历评论列表
- for (CommentVo comment : commentList) {
- // 找到顶级评论(没有父评论)
- if (comment.getPCommentId() == 0) {
- // 递归构建子评论
- comment.setChildren(getChildren(comment.getId(), commentList));
- tree.add(comment);
- }
- }
- return tree;
- }
-
- /**
- * 递归获取子评论
- *
- * @param commentId 当前评论ID
- * @param commentList 评论列表
- * @return 子评论列表
- */
- private static List getChildren(Long commentId, List commentList) {
- List children = new ArrayList<>();
-
- // 遍历评论列表
- for (CommentVo comment : commentList) {
- // 找到当前评论的子评论
- if (Long.valueOf(comment.getPCommentId()).equals(commentId)) {
- // 递归构建子评论的子评论
- comment.setChildren(getChildren(comment.getId(), commentList));
- children.add(comment);
- }
- }
- return children;
- }
-}
diff --git a/common/common-utils/src/main/java/cn/bunny/common/utils/FileUtil.java b/common/common-utils/src/main/java/cn/bunny/common/utils/FileUtil.java
index 739253c..8b591a0 100644
--- a/common/common-utils/src/main/java/cn/bunny/common/utils/FileUtil.java
+++ b/common/common-utils/src/main/java/cn/bunny/common/utils/FileUtil.java
@@ -1,5 +1,8 @@
package cn.bunny.common.utils;
+/**
+ * 计算 kb mb gb
+ */
public class FileUtil {
public static String getSize(Long fileSize) {
double fileSizeInKB = fileSize / 1024.00;
diff --git a/common/service-utils/pom.xml b/common/service-utils/pom.xml
index 3a326b2..0405330 100644
--- a/common/service-utils/pom.xml
+++ b/common/service-utils/pom.xml
@@ -19,7 +19,7 @@
cn.bunny
- model
+ dao
0.0.1-SNAPSHOT
diff --git a/common/service-utils/src/main/java/cn/bunny/common/service/config/WebMvcConfiguration.java b/common/service-utils/src/main/java/cn/bunny/common/service/config/WebMvcConfiguration.java
new file mode 100644
index 0000000..34dd3b5
--- /dev/null
+++ b/common/service-utils/src/main/java/cn/bunny/common/service/config/WebMvcConfiguration.java
@@ -0,0 +1,38 @@
+package cn.bunny.common.service.config;
+
+import cn.bunny.common.service.interceptor.UserTokenInterceptor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@Configuration
+@Slf4j
+public class WebMvcConfiguration implements WebMvcConfigurer {
+ @Autowired
+ private UserTokenInterceptor userTokenInterceptor;
+
+ /**
+ * 跨域配置
+ *
+ * @param registry 跨域注册表
+ */
+ @Override
+ public void addCorsMappings(CorsRegistry registry) {
+ registry.addMapping("/**")
+ // 是否发送Cookies
+ .allowCredentials(true)
+ // 放行哪些原始域
+ .allowedOriginPatterns("*").allowedMethods("GET", "POST", "PUT", "DELETE").allowedHeaders("*").exposedHeaders("*");
+ }
+
+ @Override
+ public void addInterceptors(InterceptorRegistry registry) {
+ String[] excludeList = {"/api/checkCode", "/api/sendEmailCode", "/api/register", "/api/login", "/api/article/loadArticle/**"};
+ log.info("WebMvcConfiguration===>开始注册自定义拦截器...");
+ // TODO 如果想使用普通JWT可以使用这个,不使用 SpringSecurity6
+ // registry.addInterceptor(userTokenInterceptor).addPathPatterns("/api/**").excludePathPatterns(excludeList);
+ }
+}
diff --git a/common/service-utils/src/main/java/cn/bunny/common/service/exception/BunnyException.java b/common/service-utils/src/main/java/cn/bunny/common/service/exception/BunnyException.java
index 1012971..680c503 100644
--- a/common/service-utils/src/main/java/cn/bunny/common/service/exception/BunnyException.java
+++ b/common/service-utils/src/main/java/cn/bunny/common/service/exception/BunnyException.java
@@ -1,6 +1,6 @@
package cn.bunny.common.service.exception;
-import cn.bunny.result.ResultCodeEnum;
+import cn.bunny.pojo.result.ResultCodeEnum;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;
diff --git a/common/service-utils/src/main/java/cn/bunny/common/service/exception/GlobalExceptionHandler.java b/common/service-utils/src/main/java/cn/bunny/common/service/exception/GlobalExceptionHandler.java
index 345d29b..30ec51c 100644
--- a/common/service-utils/src/main/java/cn/bunny/common/service/exception/GlobalExceptionHandler.java
+++ b/common/service-utils/src/main/java/cn/bunny/common/service/exception/GlobalExceptionHandler.java
@@ -1,9 +1,9 @@
package cn.bunny.common.service.exception;
-import cn.bunny.result.Result;
-import cn.bunny.result.ResultCodeEnum;
-import cn.bunny.result.constant.ExceptionConstant;
+import cn.bunny.pojo.result.Result;
+import cn.bunny.pojo.result.ResultCodeEnum;
+import cn.bunny.pojo.result.constant.ExceptionConstant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
diff --git a/common/service-utils/src/main/java/cn/bunny/common/service/interceptor/UserTokenInterceptor.java b/common/service-utils/src/main/java/cn/bunny/common/service/interceptor/UserTokenInterceptor.java
new file mode 100644
index 0000000..80aa5d6
--- /dev/null
+++ b/common/service-utils/src/main/java/cn/bunny/common/service/interceptor/UserTokenInterceptor.java
@@ -0,0 +1,54 @@
+package cn.bunny.common.service.interceptor;
+
+import cn.bunny.common.service.context.BaseContext;
+import cn.bunny.common.service.utils.JwtHelper;
+import cn.bunny.common.service.utils.ResponseUtil;
+import cn.bunny.pojo.result.Result;
+import cn.bunny.pojo.result.ResultCodeEnum;
+import cn.bunny.pojo.result.constant.RedisUserConstant;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.lang.Nullable;
+import org.springframework.stereotype.Component;
+import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+@Component
+@Slf4j
+public class UserTokenInterceptor implements HandlerInterceptor {
+ @Autowired
+ private RedisTemplate redisTemplate;
+
+ @Override
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+ log.info("UserTokenInterceptor===>设置拦截器");
+ String token = request.getHeader("token");
+ Long userId = JwtHelper.getUserId(token);
+ String username = JwtHelper.getUsername(token);
+ Object redisUserinfo = redisTemplate.opsForValue().get(RedisUserConstant.getUserLoginInfoPrefix(username));
+
+ // 不是动态方法直接返回
+ if (!(handler instanceof HandlerMethod)) return true;
+ // 解析不到userId
+ if (userId == null) {
+ ResponseUtil.out(response, Result.error(ResultCodeEnum.LOGIN_AUTH));
+ return false;
+ }
+ if (redisUserinfo == null) {
+ ResponseUtil.out(response, Result.error(ResultCodeEnum.LOGIN_AUTH));
+ return false;
+ }
+
+ BaseContext.setUserId(userId);
+ BaseContext.setUsername(username);
+ return true;
+ }
+
+ @Override
+ public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
+ BaseContext.removeUser();
+ }
+}
diff --git a/common/service-utils/src/main/java/cn/bunny/common/service/utils/ResponseUtil.java b/common/service-utils/src/main/java/cn/bunny/common/service/utils/ResponseUtil.java
index 2f3f1f2..d6f2019 100644
--- a/common/service-utils/src/main/java/cn/bunny/common/service/utils/ResponseUtil.java
+++ b/common/service-utils/src/main/java/cn/bunny/common/service/utils/ResponseUtil.java
@@ -1,6 +1,6 @@
package cn.bunny.common.service.utils;
-import cn.bunny.result.Result;
+import cn.bunny.pojo.result.Result;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import jakarta.servlet.http.HttpServletResponse;
diff --git a/model/pom.xml b/dao/pom.xml
similarity index 98%
rename from model/pom.xml
rename to dao/pom.xml
index 33eccf6..ac62f0e 100644
--- a/model/pom.xml
+++ b/dao/pom.xml
@@ -7,7 +7,7 @@
0.0.1-SNAPSHOT
- model
+ dao
jar
model
diff --git a/model/src/main/java/cn/bunny/dto/article/LoadArticleListDto.java b/dao/src/main/java/cn/bunny/dto/article/LoadArticleListDto.java
similarity index 100%
rename from model/src/main/java/cn/bunny/dto/article/LoadArticleListDto.java
rename to dao/src/main/java/cn/bunny/dto/article/LoadArticleListDto.java
diff --git a/model/src/main/java/cn/bunny/dto/article/LoadUserArticleDto.java b/dao/src/main/java/cn/bunny/dto/article/LoadUserArticleDto.java
similarity index 100%
rename from model/src/main/java/cn/bunny/dto/article/LoadUserArticleDto.java
rename to dao/src/main/java/cn/bunny/dto/article/LoadUserArticleDto.java
diff --git a/model/src/main/java/cn/bunny/dto/common/CommentPostDto.java b/dao/src/main/java/cn/bunny/dto/common/CommentPostDto.java
similarity index 100%
rename from model/src/main/java/cn/bunny/dto/common/CommentPostDto.java
rename to dao/src/main/java/cn/bunny/dto/common/CommentPostDto.java
diff --git a/model/src/main/java/cn/bunny/dto/common/CommentQueryDto.java b/dao/src/main/java/cn/bunny/dto/common/CommentQueryDto.java
similarity index 100%
rename from model/src/main/java/cn/bunny/dto/common/CommentQueryDto.java
rename to dao/src/main/java/cn/bunny/dto/common/CommentQueryDto.java
diff --git a/model/src/main/java/cn/bunny/dto/common/QueryTopTypeDto.java b/dao/src/main/java/cn/bunny/dto/common/QueryTopTypeDto.java
similarity index 100%
rename from model/src/main/java/cn/bunny/dto/common/QueryTopTypeDto.java
rename to dao/src/main/java/cn/bunny/dto/common/QueryTopTypeDto.java
diff --git a/model/src/main/java/cn/bunny/dto/email/EmailTemplateDto.java b/dao/src/main/java/cn/bunny/dto/email/EmailTemplateDto.java
similarity index 100%
rename from model/src/main/java/cn/bunny/dto/email/EmailTemplateDto.java
rename to dao/src/main/java/cn/bunny/dto/email/EmailTemplateDto.java
diff --git a/model/src/main/java/cn/bunny/dto/email/EmailUsersDto.java b/dao/src/main/java/cn/bunny/dto/email/EmailUsersDto.java
similarity index 100%
rename from model/src/main/java/cn/bunny/dto/email/EmailUsersDto.java
rename to dao/src/main/java/cn/bunny/dto/email/EmailUsersDto.java
diff --git a/model/src/main/java/cn/bunny/dto/user/LoginDto.java b/dao/src/main/java/cn/bunny/dto/user/LoginDto.java
similarity index 100%
rename from model/src/main/java/cn/bunny/dto/user/LoginDto.java
rename to dao/src/main/java/cn/bunny/dto/user/LoginDto.java
diff --git a/model/src/main/java/cn/bunny/dto/user/RegisterDto.java b/dao/src/main/java/cn/bunny/dto/user/RegisterDto.java
similarity index 100%
rename from model/src/main/java/cn/bunny/dto/user/RegisterDto.java
rename to dao/src/main/java/cn/bunny/dto/user/RegisterDto.java
diff --git a/model/src/main/java/cn/bunny/dto/user/ResetPwdDto.java b/dao/src/main/java/cn/bunny/dto/user/ResetPwdDto.java
similarity index 100%
rename from model/src/main/java/cn/bunny/dto/user/ResetPwdDto.java
rename to dao/src/main/java/cn/bunny/dto/user/ResetPwdDto.java
diff --git a/model/src/main/java/cn/bunny/dto/user/UserInfoDto.java b/dao/src/main/java/cn/bunny/dto/user/UserInfoDto.java
similarity index 100%
rename from model/src/main/java/cn/bunny/dto/user/UserInfoDto.java
rename to dao/src/main/java/cn/bunny/dto/user/UserInfoDto.java
diff --git a/model/src/main/java/cn/bunny/dto/user/UserIntegralRecordDto.java b/dao/src/main/java/cn/bunny/dto/user/UserIntegralRecordDto.java
similarity index 100%
rename from model/src/main/java/cn/bunny/dto/user/UserIntegralRecordDto.java
rename to dao/src/main/java/cn/bunny/dto/user/UserIntegralRecordDto.java
diff --git a/model/src/main/java/cn/bunny/dto/user/UserMessageDto.java b/dao/src/main/java/cn/bunny/dto/user/UserMessageDto.java
similarity index 100%
rename from model/src/main/java/cn/bunny/dto/user/UserMessageDto.java
rename to dao/src/main/java/cn/bunny/dto/user/UserMessageDto.java
diff --git a/model/src/main/java/cn/bunny/entity/base/BaseEntity.java b/dao/src/main/java/cn/bunny/entity/base/BaseEntity.java
similarity index 100%
rename from model/src/main/java/cn/bunny/entity/base/BaseEntity.java
rename to dao/src/main/java/cn/bunny/entity/base/BaseEntity.java
diff --git a/model/src/main/java/cn/bunny/entity/system/admin/AdminPower.java b/dao/src/main/java/cn/bunny/entity/system/admin/AdminPower.java
similarity index 100%
rename from model/src/main/java/cn/bunny/entity/system/admin/AdminPower.java
rename to dao/src/main/java/cn/bunny/entity/system/admin/AdminPower.java
diff --git a/model/src/main/java/cn/bunny/entity/system/admin/AdminRole.java b/dao/src/main/java/cn/bunny/entity/system/admin/AdminRole.java
similarity index 100%
rename from model/src/main/java/cn/bunny/entity/system/admin/AdminRole.java
rename to dao/src/main/java/cn/bunny/entity/system/admin/AdminRole.java
diff --git a/model/src/main/java/cn/bunny/entity/system/admin/AdminRolePower.java b/dao/src/main/java/cn/bunny/entity/system/admin/AdminRolePower.java
similarity index 100%
rename from model/src/main/java/cn/bunny/entity/system/admin/AdminRolePower.java
rename to dao/src/main/java/cn/bunny/entity/system/admin/AdminRolePower.java
diff --git a/model/src/main/java/cn/bunny/entity/system/admin/AdminUserRole.java b/dao/src/main/java/cn/bunny/entity/system/admin/AdminUserRole.java
similarity index 100%
rename from model/src/main/java/cn/bunny/entity/system/admin/AdminUserRole.java
rename to dao/src/main/java/cn/bunny/entity/system/admin/AdminUserRole.java
diff --git a/model/src/main/java/cn/bunny/entity/system/admin/auth/AuthUserRole.java b/dao/src/main/java/cn/bunny/entity/system/admin/auth/AuthUserRole.java
similarity index 100%
rename from model/src/main/java/cn/bunny/entity/system/admin/auth/AuthUserRole.java
rename to dao/src/main/java/cn/bunny/entity/system/admin/auth/AuthUserRole.java
diff --git a/model/src/main/java/cn/bunny/entity/system/article/Article.java b/dao/src/main/java/cn/bunny/entity/system/article/Article.java
similarity index 100%
rename from model/src/main/java/cn/bunny/entity/system/article/Article.java
rename to dao/src/main/java/cn/bunny/entity/system/article/Article.java
diff --git a/model/src/main/java/cn/bunny/entity/system/article/ForumComment.java b/dao/src/main/java/cn/bunny/entity/system/article/ForumComment.java
similarity index 100%
rename from model/src/main/java/cn/bunny/entity/system/article/ForumComment.java
rename to dao/src/main/java/cn/bunny/entity/system/article/ForumComment.java
diff --git a/model/src/main/java/cn/bunny/entity/system/article/IntegralRecord.java b/dao/src/main/java/cn/bunny/entity/system/article/IntegralRecord.java
similarity index 100%
rename from model/src/main/java/cn/bunny/entity/system/article/IntegralRecord.java
rename to dao/src/main/java/cn/bunny/entity/system/article/IntegralRecord.java
diff --git a/model/src/main/java/cn/bunny/entity/system/article/LikeRecord.java b/dao/src/main/java/cn/bunny/entity/system/article/LikeRecord.java
similarity index 100%
rename from model/src/main/java/cn/bunny/entity/system/article/LikeRecord.java
rename to dao/src/main/java/cn/bunny/entity/system/article/LikeRecord.java
diff --git a/model/src/main/java/cn/bunny/entity/system/board/ForumBoard.java b/dao/src/main/java/cn/bunny/entity/system/board/ForumBoard.java
similarity index 100%
rename from model/src/main/java/cn/bunny/entity/system/board/ForumBoard.java
rename to dao/src/main/java/cn/bunny/entity/system/board/ForumBoard.java
diff --git a/model/src/main/java/cn/bunny/entity/system/email/EmailSend.java b/dao/src/main/java/cn/bunny/entity/system/email/EmailSend.java
similarity index 100%
rename from model/src/main/java/cn/bunny/entity/system/email/EmailSend.java
rename to dao/src/main/java/cn/bunny/entity/system/email/EmailSend.java
diff --git a/model/src/main/java/cn/bunny/entity/system/email/EmailSendInit.java b/dao/src/main/java/cn/bunny/entity/system/email/EmailSendInit.java
similarity index 100%
rename from model/src/main/java/cn/bunny/entity/system/email/EmailSendInit.java
rename to dao/src/main/java/cn/bunny/entity/system/email/EmailSendInit.java
diff --git a/model/src/main/java/cn/bunny/entity/system/email/EmailTemplate.java b/dao/src/main/java/cn/bunny/entity/system/email/EmailTemplate.java
similarity index 100%
rename from model/src/main/java/cn/bunny/entity/system/email/EmailTemplate.java
rename to dao/src/main/java/cn/bunny/entity/system/email/EmailTemplate.java
diff --git a/model/src/main/java/cn/bunny/entity/system/email/EmailUsers.java b/dao/src/main/java/cn/bunny/entity/system/email/EmailUsers.java
similarity index 100%
rename from model/src/main/java/cn/bunny/entity/system/email/EmailUsers.java
rename to dao/src/main/java/cn/bunny/entity/system/email/EmailUsers.java
diff --git a/model/src/main/java/cn/bunny/entity/system/file/Files.java b/dao/src/main/java/cn/bunny/entity/system/file/Files.java
similarity index 100%
rename from model/src/main/java/cn/bunny/entity/system/file/Files.java
rename to dao/src/main/java/cn/bunny/entity/system/file/Files.java
diff --git a/model/src/main/java/cn/bunny/entity/system/user/User.java b/dao/src/main/java/cn/bunny/entity/system/user/User.java
similarity index 100%
rename from model/src/main/java/cn/bunny/entity/system/user/User.java
rename to dao/src/main/java/cn/bunny/entity/system/user/User.java
diff --git a/model/src/main/java/cn/bunny/entity/system/user/UserMessage.java b/dao/src/main/java/cn/bunny/entity/system/user/UserMessage.java
similarity index 100%
rename from model/src/main/java/cn/bunny/entity/system/user/UserMessage.java
rename to dao/src/main/java/cn/bunny/entity/system/user/UserMessage.java
diff --git a/model/src/main/java/cn/bunny/enums/OperationType.java b/dao/src/main/java/cn/bunny/pojo/enums/OperationType.java
similarity index 74%
rename from model/src/main/java/cn/bunny/enums/OperationType.java
rename to dao/src/main/java/cn/bunny/pojo/enums/OperationType.java
index 7e0999e..e15d341 100644
--- a/model/src/main/java/cn/bunny/enums/OperationType.java
+++ b/dao/src/main/java/cn/bunny/pojo/enums/OperationType.java
@@ -1,4 +1,4 @@
-package cn.bunny.enums;
+package cn.bunny.pojo.enums;
/**
* 数据库操作类型
diff --git a/model/src/main/java/cn/bunny/result/Result.java b/dao/src/main/java/cn/bunny/pojo/result/Result.java
similarity index 99%
rename from model/src/main/java/cn/bunny/result/Result.java
rename to dao/src/main/java/cn/bunny/pojo/result/Result.java
index 6484684..d85b26d 100644
--- a/model/src/main/java/cn/bunny/result/Result.java
+++ b/dao/src/main/java/cn/bunny/pojo/result/Result.java
@@ -1,4 +1,4 @@
-package cn.bunny.result;
+package cn.bunny.pojo.result;
import lombok.AllArgsConstructor;
import lombok.Data;
diff --git a/model/src/main/java/cn/bunny/result/ResultCodeEnum.java b/dao/src/main/java/cn/bunny/pojo/result/ResultCodeEnum.java
similarity index 98%
rename from model/src/main/java/cn/bunny/result/ResultCodeEnum.java
rename to dao/src/main/java/cn/bunny/pojo/result/ResultCodeEnum.java
index d391b55..d2a98d7 100644
--- a/model/src/main/java/cn/bunny/result/ResultCodeEnum.java
+++ b/dao/src/main/java/cn/bunny/pojo/result/ResultCodeEnum.java
@@ -1,4 +1,4 @@
-package cn.bunny.result;
+package cn.bunny.pojo.result;
import lombok.Getter;
diff --git a/model/src/main/java/cn/bunny/result/constant/ExceptionConstant.java b/dao/src/main/java/cn/bunny/pojo/result/constant/ExceptionConstant.java
similarity index 98%
rename from model/src/main/java/cn/bunny/result/constant/ExceptionConstant.java
rename to dao/src/main/java/cn/bunny/pojo/result/constant/ExceptionConstant.java
index 7662b0e..cdb8945 100644
--- a/model/src/main/java/cn/bunny/result/constant/ExceptionConstant.java
+++ b/dao/src/main/java/cn/bunny/pojo/result/constant/ExceptionConstant.java
@@ -1,4 +1,4 @@
-package cn.bunny.result.constant;
+package cn.bunny.pojo.result.constant;
import lombok.Data;
diff --git a/model/src/main/java/cn/bunny/result/constant/FileMessageConstant.java b/dao/src/main/java/cn/bunny/pojo/result/constant/FileMessageConstant.java
similarity index 96%
rename from model/src/main/java/cn/bunny/result/constant/FileMessageConstant.java
rename to dao/src/main/java/cn/bunny/pojo/result/constant/FileMessageConstant.java
index db799c7..d608a30 100644
--- a/model/src/main/java/cn/bunny/result/constant/FileMessageConstant.java
+++ b/dao/src/main/java/cn/bunny/pojo/result/constant/FileMessageConstant.java
@@ -1,4 +1,4 @@
-package cn.bunny.result.constant;
+package cn.bunny.pojo.result.constant;
import lombok.Data;
diff --git a/model/src/main/java/cn/bunny/result/constant/LocalDateTimeConstant.java b/dao/src/main/java/cn/bunny/pojo/result/constant/LocalDateTimeConstant.java
similarity index 90%
rename from model/src/main/java/cn/bunny/result/constant/LocalDateTimeConstant.java
rename to dao/src/main/java/cn/bunny/pojo/result/constant/LocalDateTimeConstant.java
index b0c4d40..afda4da 100644
--- a/model/src/main/java/cn/bunny/result/constant/LocalDateTimeConstant.java
+++ b/dao/src/main/java/cn/bunny/pojo/result/constant/LocalDateTimeConstant.java
@@ -1,4 +1,4 @@
-package cn.bunny.result.constant;
+package cn.bunny.pojo.result.constant;
import lombok.Data;
diff --git a/model/src/main/java/cn/bunny/result/constant/MailMessageConstant.java b/dao/src/main/java/cn/bunny/pojo/result/constant/MailMessageConstant.java
similarity index 92%
rename from model/src/main/java/cn/bunny/result/constant/MailMessageConstant.java
rename to dao/src/main/java/cn/bunny/pojo/result/constant/MailMessageConstant.java
index c2410ac..9a13a7f 100644
--- a/model/src/main/java/cn/bunny/result/constant/MailMessageConstant.java
+++ b/dao/src/main/java/cn/bunny/pojo/result/constant/MailMessageConstant.java
@@ -1,4 +1,4 @@
-package cn.bunny.result.constant;
+package cn.bunny.pojo.result.constant;
import lombok.Data;
diff --git a/model/src/main/java/cn/bunny/result/constant/RedisUserConstant.java b/dao/src/main/java/cn/bunny/pojo/result/constant/RedisUserConstant.java
similarity index 97%
rename from model/src/main/java/cn/bunny/result/constant/RedisUserConstant.java
rename to dao/src/main/java/cn/bunny/pojo/result/constant/RedisUserConstant.java
index 9772191..9ddf241 100644
--- a/model/src/main/java/cn/bunny/result/constant/RedisUserConstant.java
+++ b/dao/src/main/java/cn/bunny/pojo/result/constant/RedisUserConstant.java
@@ -1,4 +1,4 @@
-package cn.bunny.result.constant;
+package cn.bunny.pojo.result.constant;
import lombok.Data;
diff --git a/model/src/main/java/cn/bunny/result/constant/SQLAutoFillConstant.java b/dao/src/main/java/cn/bunny/pojo/result/constant/SQLAutoFillConstant.java
similarity index 90%
rename from model/src/main/java/cn/bunny/result/constant/SQLAutoFillConstant.java
rename to dao/src/main/java/cn/bunny/pojo/result/constant/SQLAutoFillConstant.java
index 6b09482..d2ebde4 100644
--- a/model/src/main/java/cn/bunny/result/constant/SQLAutoFillConstant.java
+++ b/dao/src/main/java/cn/bunny/pojo/result/constant/SQLAutoFillConstant.java
@@ -1,4 +1,4 @@
-package cn.bunny.result.constant;
+package cn.bunny.pojo.result.constant;
import lombok.Data;
diff --git a/model/src/main/java/cn/bunny/result/constant/SecurityConstant.java b/dao/src/main/java/cn/bunny/pojo/result/constant/SecurityConstant.java
similarity index 91%
rename from model/src/main/java/cn/bunny/result/constant/SecurityConstant.java
rename to dao/src/main/java/cn/bunny/pojo/result/constant/SecurityConstant.java
index a26c0b4..4d21335 100644
--- a/model/src/main/java/cn/bunny/result/constant/SecurityConstant.java
+++ b/dao/src/main/java/cn/bunny/pojo/result/constant/SecurityConstant.java
@@ -1,4 +1,4 @@
-package cn.bunny.result.constant;
+package cn.bunny.pojo.result.constant;
import lombok.Data;
diff --git a/model/src/main/java/cn/bunny/result/constant/StatusConstant.java b/dao/src/main/java/cn/bunny/pojo/result/constant/StatusConstant.java
similarity index 85%
rename from model/src/main/java/cn/bunny/result/constant/StatusConstant.java
rename to dao/src/main/java/cn/bunny/pojo/result/constant/StatusConstant.java
index c530625..333531e 100644
--- a/model/src/main/java/cn/bunny/result/constant/StatusConstant.java
+++ b/dao/src/main/java/cn/bunny/pojo/result/constant/StatusConstant.java
@@ -1,4 +1,4 @@
-package cn.bunny.result.constant;
+package cn.bunny.pojo.result.constant;
import lombok.Data;
diff --git a/model/src/main/java/cn/bunny/result/constant/UserConstant.java b/dao/src/main/java/cn/bunny/pojo/result/constant/UserConstant.java
similarity index 85%
rename from model/src/main/java/cn/bunny/result/constant/UserConstant.java
rename to dao/src/main/java/cn/bunny/pojo/result/constant/UserConstant.java
index d9f4832..b36248a 100644
--- a/model/src/main/java/cn/bunny/result/constant/UserConstant.java
+++ b/dao/src/main/java/cn/bunny/pojo/result/constant/UserConstant.java
@@ -1,4 +1,4 @@
-package cn.bunny.result.constant;
+package cn.bunny.pojo.result.constant;
import lombok.Data;
diff --git a/model/src/main/java/cn/bunny/tree/AbstractTreeNode.java b/dao/src/main/java/cn/bunny/pojo/tree/AbstractTreeNode.java
similarity index 86%
rename from model/src/main/java/cn/bunny/tree/AbstractTreeNode.java
rename to dao/src/main/java/cn/bunny/pojo/tree/AbstractTreeNode.java
index d5e7770..643a62e 100644
--- a/model/src/main/java/cn/bunny/tree/AbstractTreeNode.java
+++ b/dao/src/main/java/cn/bunny/pojo/tree/AbstractTreeNode.java
@@ -1,4 +1,4 @@
-package cn.bunny.tree;
+package cn.bunny.pojo.tree;
import java.util.List;
diff --git a/model/src/main/java/cn/bunny/tree/TreeBuilder.java b/dao/src/main/java/cn/bunny/pojo/tree/TreeBuilder.java
similarity index 96%
rename from model/src/main/java/cn/bunny/tree/TreeBuilder.java
rename to dao/src/main/java/cn/bunny/pojo/tree/TreeBuilder.java
index f85d419..0b6214f 100644
--- a/model/src/main/java/cn/bunny/tree/TreeBuilder.java
+++ b/dao/src/main/java/cn/bunny/pojo/tree/TreeBuilder.java
@@ -1,4 +1,4 @@
-package cn.bunny.tree;
+package cn.bunny.pojo.tree;
import java.util.ArrayList;
import java.util.List;
diff --git a/model/src/main/java/cn/bunny/vo/email/EmailTemplateVo.java b/dao/src/main/java/cn/bunny/vo/email/EmailTemplateVo.java
similarity index 100%
rename from model/src/main/java/cn/bunny/vo/email/EmailTemplateVo.java
rename to dao/src/main/java/cn/bunny/vo/email/EmailTemplateVo.java
diff --git a/model/src/main/java/cn/bunny/vo/file/FileInfoVo.java b/dao/src/main/java/cn/bunny/vo/file/FileInfoVo.java
similarity index 100%
rename from model/src/main/java/cn/bunny/vo/file/FileInfoVo.java
rename to dao/src/main/java/cn/bunny/vo/file/FileInfoVo.java
diff --git a/model/src/main/java/cn/bunny/vo/page/PageResult.java b/dao/src/main/java/cn/bunny/vo/page/PageResult.java
similarity index 100%
rename from model/src/main/java/cn/bunny/vo/page/PageResult.java
rename to dao/src/main/java/cn/bunny/vo/page/PageResult.java
diff --git a/model/src/main/java/cn/bunny/vo/system/article/ForumArticleVo.java b/dao/src/main/java/cn/bunny/vo/system/article/ForumArticleVo.java
similarity index 100%
rename from model/src/main/java/cn/bunny/vo/system/article/ForumArticleVo.java
rename to dao/src/main/java/cn/bunny/vo/system/article/ForumArticleVo.java
diff --git a/model/src/main/java/cn/bunny/vo/system/board/ForumBoardVo.java b/dao/src/main/java/cn/bunny/vo/system/board/ForumBoardVo.java
similarity index 93%
rename from model/src/main/java/cn/bunny/vo/system/board/ForumBoardVo.java
rename to dao/src/main/java/cn/bunny/vo/system/board/ForumBoardVo.java
index 66c79e0..42b86a4 100644
--- a/model/src/main/java/cn/bunny/vo/system/board/ForumBoardVo.java
+++ b/dao/src/main/java/cn/bunny/vo/system/board/ForumBoardVo.java
@@ -1,6 +1,6 @@
package cn.bunny.vo.system.board;
-import cn.bunny.tree.AbstractTreeNode;
+import cn.bunny.pojo.tree.AbstractTreeNode;
import lombok.Data;
import java.util.List;
diff --git a/model/src/main/java/cn/bunny/vo/system/comment/CommentVo.java b/dao/src/main/java/cn/bunny/vo/system/comment/CommentVo.java
similarity index 100%
rename from model/src/main/java/cn/bunny/vo/system/comment/CommentVo.java
rename to dao/src/main/java/cn/bunny/vo/system/comment/CommentVo.java
diff --git a/model/src/main/java/cn/bunny/vo/system/login/LoginVo.java b/dao/src/main/java/cn/bunny/vo/system/login/LoginVo.java
similarity index 96%
rename from model/src/main/java/cn/bunny/vo/system/login/LoginVo.java
rename to dao/src/main/java/cn/bunny/vo/system/login/LoginVo.java
index 9bda0ae..087e7de 100644
--- a/model/src/main/java/cn/bunny/vo/system/login/LoginVo.java
+++ b/dao/src/main/java/cn/bunny/vo/system/login/LoginVo.java
@@ -1,6 +1,6 @@
package cn.bunny.vo.system.login;
-import cn.bunny.result.constant.LocalDateTimeConstant;
+import cn.bunny.pojo.result.constant.LocalDateTimeConstant;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
diff --git a/model/src/main/java/cn/bunny/vo/system/login/ValidateCodeVo.java b/dao/src/main/java/cn/bunny/vo/system/login/ValidateCodeVo.java
similarity index 100%
rename from model/src/main/java/cn/bunny/vo/system/login/ValidateCodeVo.java
rename to dao/src/main/java/cn/bunny/vo/system/login/ValidateCodeVo.java
diff --git a/model/src/main/java/cn/bunny/vo/system/user/UserInfoVo.java b/dao/src/main/java/cn/bunny/vo/system/user/UserInfoVo.java
similarity index 96%
rename from model/src/main/java/cn/bunny/vo/system/user/UserInfoVo.java
rename to dao/src/main/java/cn/bunny/vo/system/user/UserInfoVo.java
index fa60a87..78e954d 100644
--- a/model/src/main/java/cn/bunny/vo/system/user/UserInfoVo.java
+++ b/dao/src/main/java/cn/bunny/vo/system/user/UserInfoVo.java
@@ -1,6 +1,6 @@
package cn.bunny.vo.system.user;
-import cn.bunny.result.constant.LocalDateTimeConstant;
+import cn.bunny.pojo.result.constant.LocalDateTimeConstant;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
diff --git a/model/src/main/java/cn/bunny/vo/system/user/UserIntegralRecordVo.java b/dao/src/main/java/cn/bunny/vo/system/user/UserIntegralRecordVo.java
similarity index 100%
rename from model/src/main/java/cn/bunny/vo/system/user/UserIntegralRecordVo.java
rename to dao/src/main/java/cn/bunny/vo/system/user/UserIntegralRecordVo.java
diff --git a/model/src/main/java/cn/bunny/vo/system/user/UserMessageCountVo.java b/dao/src/main/java/cn/bunny/vo/system/user/UserMessageCountVo.java
similarity index 100%
rename from model/src/main/java/cn/bunny/vo/system/user/UserMessageCountVo.java
rename to dao/src/main/java/cn/bunny/vo/system/user/UserMessageCountVo.java
diff --git a/model/src/main/java/cn/bunny/vo/system/user/UserMessageVo.java b/dao/src/main/java/cn/bunny/vo/system/user/UserMessageVo.java
similarity index 100%
rename from model/src/main/java/cn/bunny/vo/system/user/UserMessageVo.java
rename to dao/src/main/java/cn/bunny/vo/system/user/UserMessageVo.java
diff --git a/module/module-mail/src/main/java/cn/bunny/module/mail/utils/MailSendCheckUtil.java b/module/module-mail/src/main/java/cn/bunny/module/mail/utils/MailSendCheckUtil.java
index 6829253..dab0ff1 100644
--- a/module/module-mail/src/main/java/cn/bunny/module/mail/utils/MailSendCheckUtil.java
+++ b/module/module-mail/src/main/java/cn/bunny/module/mail/utils/MailSendCheckUtil.java
@@ -2,7 +2,7 @@ package cn.bunny.module.mail.utils;
import cn.bunny.common.service.utils.EmptyUtil;
import cn.bunny.entity.system.email.EmailSend;
-import cn.bunny.result.constant.MailMessageConstant;
+import cn.bunny.pojo.result.constant.MailMessageConstant;
public class MailSendCheckUtil {
/**
diff --git a/module/module-minio/src/main/java/cn/bunny/module/minio/utils/MinioUtil.java b/module/module-minio/src/main/java/cn/bunny/module/minio/utils/MinioUtil.java
index 8fc332d..cec93ea 100644
--- a/module/module-minio/src/main/java/cn/bunny/module/minio/utils/MinioUtil.java
+++ b/module/module-minio/src/main/java/cn/bunny/module/minio/utils/MinioUtil.java
@@ -1,7 +1,7 @@
package cn.bunny.module.minio.utils;
-import cn.bunny.result.constant.FileMessageConstant;
import cn.bunny.common.service.exception.BunnyException;
+import cn.bunny.pojo.result.constant.FileMessageConstant;
import io.minio.*;
import io.minio.messages.*;
import lombok.extern.slf4j.Slf4j;
diff --git a/module/pom.xml b/module/pom.xml
index 3a479ab..4ea3077 100644
--- a/module/pom.xml
+++ b/module/pom.xml
@@ -17,6 +17,7 @@
module-mail
module-rabbitMQ
module-websocket
+ spring-security
module-task
diff --git a/module/spring-security/src/main/java/cn/bunny/security/filter/TokenAuthenticationFilter.java b/module/spring-security/src/main/java/cn/bunny/security/filter/TokenAuthenticationFilter.java
index bea057b..cb10849 100644
--- a/module/spring-security/src/main/java/cn/bunny/security/filter/TokenAuthenticationFilter.java
+++ b/module/spring-security/src/main/java/cn/bunny/security/filter/TokenAuthenticationFilter.java
@@ -4,9 +4,9 @@ import cn.bunny.common.service.context.BaseContext;
import cn.bunny.common.service.exception.BunnyException;
import cn.bunny.common.service.utils.JwtHelper;
import cn.bunny.common.service.utils.ResponseUtil;
-import cn.bunny.result.Result;
-import cn.bunny.result.ResultCodeEnum;
-import cn.bunny.result.constant.RedisUserConstant;
+import cn.bunny.pojo.result.Result;
+import cn.bunny.pojo.result.ResultCodeEnum;
+import cn.bunny.pojo.result.constant.RedisUserConstant;
import cn.bunny.vo.system.login.LoginVo;
import com.alibaba.fastjson2.JSON;
import jakarta.servlet.FilterChain;
diff --git a/module/spring-security/src/main/java/cn/bunny/security/filter/TokenLoginFilterService.java b/module/spring-security/src/main/java/cn/bunny/security/filter/TokenLoginFilterService.java
index 9eadac3..47bcf59 100644
--- a/module/spring-security/src/main/java/cn/bunny/security/filter/TokenLoginFilterService.java
+++ b/module/spring-security/src/main/java/cn/bunny/security/filter/TokenLoginFilterService.java
@@ -3,9 +3,9 @@ package cn.bunny.security.filter;
import cn.bunny.common.service.utils.ResponseUtil;
import cn.bunny.dto.user.LoginDto;
-import cn.bunny.result.Result;
-import cn.bunny.result.ResultCodeEnum;
-import cn.bunny.result.constant.RedisUserConstant;
+import cn.bunny.pojo.result.Result;
+import cn.bunny.pojo.result.ResultCodeEnum;
+import cn.bunny.pojo.result.constant.RedisUserConstant;
import cn.bunny.security.handelr.SecurityAuthenticationFailureHandler;
import cn.bunny.security.handelr.SecurityAuthenticationSuccessHandler;
import cn.bunny.security.service.CustomUserDetailsService;
diff --git a/module/spring-security/src/main/java/cn/bunny/security/handelr/SecurityAccessDeniedHandler.java b/module/spring-security/src/main/java/cn/bunny/security/handelr/SecurityAccessDeniedHandler.java
index b14a8d7..6dc7ea8 100644
--- a/module/spring-security/src/main/java/cn/bunny/security/handelr/SecurityAccessDeniedHandler.java
+++ b/module/spring-security/src/main/java/cn/bunny/security/handelr/SecurityAccessDeniedHandler.java
@@ -1,7 +1,7 @@
package cn.bunny.security.handelr;
-import cn.bunny.result.Result;
-import cn.bunny.result.ResultCodeEnum;
+import cn.bunny.pojo.result.Result;
+import cn.bunny.pojo.result.ResultCodeEnum;
import com.alibaba.fastjson2.JSON;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
diff --git a/module/spring-security/src/main/java/cn/bunny/security/handelr/SecurityAuthenticationEntryPoint.java b/module/spring-security/src/main/java/cn/bunny/security/handelr/SecurityAuthenticationEntryPoint.java
index cd82558..39801f9 100644
--- a/module/spring-security/src/main/java/cn/bunny/security/handelr/SecurityAuthenticationEntryPoint.java
+++ b/module/spring-security/src/main/java/cn/bunny/security/handelr/SecurityAuthenticationEntryPoint.java
@@ -1,8 +1,8 @@
package cn.bunny.security.handelr;
import cn.bunny.common.service.utils.ResponseUtil;
-import cn.bunny.result.Result;
-import cn.bunny.result.ResultCodeEnum;
+import cn.bunny.pojo.result.Result;
+import cn.bunny.pojo.result.ResultCodeEnum;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
diff --git a/module/spring-security/src/main/java/cn/bunny/security/handelr/SecurityAuthenticationFailureHandler.java b/module/spring-security/src/main/java/cn/bunny/security/handelr/SecurityAuthenticationFailureHandler.java
index e48ad49..e6eba91 100644
--- a/module/spring-security/src/main/java/cn/bunny/security/handelr/SecurityAuthenticationFailureHandler.java
+++ b/module/spring-security/src/main/java/cn/bunny/security/handelr/SecurityAuthenticationFailureHandler.java
@@ -1,6 +1,6 @@
package cn.bunny.security.handelr;
-import cn.bunny.result.Result;
+import cn.bunny.pojo.result.Result;
import com.alibaba.fastjson2.JSON;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
diff --git a/module/spring-security/src/main/java/cn/bunny/security/handelr/SecurityAuthenticationSuccessHandler.java b/module/spring-security/src/main/java/cn/bunny/security/handelr/SecurityAuthenticationSuccessHandler.java
index e5bd0fd..fb6605e 100644
--- a/module/spring-security/src/main/java/cn/bunny/security/handelr/SecurityAuthenticationSuccessHandler.java
+++ b/module/spring-security/src/main/java/cn/bunny/security/handelr/SecurityAuthenticationSuccessHandler.java
@@ -1,6 +1,6 @@
package cn.bunny.security.handelr;
-import cn.bunny.result.Result;
+import cn.bunny.pojo.result.Result;
import com.alibaba.fastjson2.JSON;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
diff --git a/pom.xml b/pom.xml
index 4325dff..e897960 100644
--- a/pom.xml
+++ b/pom.xml
@@ -17,7 +17,7 @@
common
- model
+ dao
service
module
diff --git a/service/src/main/java/cn/bunny/service/aop/annotation/AutoFill.java b/service/src/main/java/cn/bunny/service/aop/annotation/AutoFill.java
index 8c26d32..cf2b292 100644
--- a/service/src/main/java/cn/bunny/service/aop/annotation/AutoFill.java
+++ b/service/src/main/java/cn/bunny/service/aop/annotation/AutoFill.java
@@ -1,6 +1,6 @@
package cn.bunny.service.aop.annotation;
-import cn.bunny.enums.OperationType;
+import cn.bunny.pojo.enums.OperationType;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
diff --git a/service/src/main/java/cn/bunny/service/controller/LoginController.java b/service/src/main/java/cn/bunny/service/controller/LoginController.java
index eeb495f..6d4aa81 100644
--- a/service/src/main/java/cn/bunny/service/controller/LoginController.java
+++ b/service/src/main/java/cn/bunny/service/controller/LoginController.java
@@ -2,7 +2,7 @@ package cn.bunny.service.controller;
import cn.bunny.dto.user.LoginDto;
-import cn.bunny.result.Result;
+import cn.bunny.pojo.result.Result;
import cn.bunny.service.service.UserService;
import cn.bunny.vo.system.login.LoginVo;
import io.swagger.v3.oas.annotations.Operation;
diff --git a/service/src/main/java/cn/bunny/service/security/CustomAuthorizationManagerServiceImpl.java b/service/src/main/java/cn/bunny/service/security/CustomAuthorizationManagerServiceImpl.java
index 6c3fccb..c26adbd 100644
--- a/service/src/main/java/cn/bunny/service/security/CustomAuthorizationManagerServiceImpl.java
+++ b/service/src/main/java/cn/bunny/service/security/CustomAuthorizationManagerServiceImpl.java
@@ -1,13 +1,20 @@
package cn.bunny.service.security;
+import cn.bunny.common.service.utils.JwtHelper;
+import cn.bunny.entity.system.admin.AdminPower;
import cn.bunny.security.service.CustomAuthorizationManagerService;
+import cn.bunny.service.mapper.AdminPowerMapper;
+import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.authorization.AuthorizationDecision;
import org.springframework.security.core.Authentication;
+import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.web.access.intercept.RequestAuthorizationContext;
-import org.springframework.stereotype.Service;
+import org.springframework.stereotype.Component;
+import java.util.List;
import java.util.function.Supplier;
@@ -15,22 +22,51 @@ import java.util.function.Supplier;
* 自定义权限判断
* 判断用户有哪些权限
*/
-@Service
+@Component
@Slf4j
public class CustomAuthorizationManagerServiceImpl implements CustomAuthorizationManagerService {
+ @Autowired
+ private AdminPowerMapper adminPowerMapper;
+
@Override
public void verify(Supplier authentication, RequestAuthorizationContext requestAuthorizationContext) {
CustomAuthorizationManagerService.super.verify(authentication, requestAuthorizationContext);
}
@Override
- public AuthorizationDecision check(Supplier authentication, RequestAuthorizationContext object) {
- String token = object.getRequest().getHeader("token");
-
+ public AuthorizationDecision check(Supplier authentication, RequestAuthorizationContext context) {
+ // 用户的token和用户id、请求Url
+ HttpServletRequest request = context.getRequest();
+ String token = request.getHeader("token");
+ Long userId = JwtHelper.getUserId(token);// 用户id
+ String requestURI = request.getRequestURI();// 请求地址
+ String method = request.getMethod();// 请求方式
+ List roleCodeList = authentication.get().getAuthorities().stream().map(GrantedAuthority::getAuthority).toList();// 角色代码列表
if (token == null) {
throw new AccessDeniedException("");
}
- return new AuthorizationDecision(true);
+ return new AuthorizationDecision(hasRoleList(requestURI, method, userId));
+ }
+
+ /**
+ * 查询用户所属的角色信息
+ *
+ * @param requestURI 请求url地址
+ * @param method 请求方式
+ * @param userId 用户id
+ */
+ private Boolean hasRoleList(String requestURI, String method, Long userId) {
+ // 查询用户权限
+ List powerList = adminPowerMapper.queryByUserIdWithPower(userId);
+ // 如果查询到当前地址符合这个地址
+ for (AdminPower adminPower : powerList) {
+ String description = adminPower.getDescription();
+ if (description.equals(requestURI) || requestURI.matches(description)) {
+ return true;
+ }
+ }
+
+ return false;
}
}
diff --git a/service/src/main/java/cn/bunny/service/security/CustomUserDetailsService.java b/service/src/main/java/cn/bunny/service/security/CustomUserDetailsService.java
index b3d7237..ebc6310 100644
--- a/service/src/main/java/cn/bunny/service/security/CustomUserDetailsService.java
+++ b/service/src/main/java/cn/bunny/service/security/CustomUserDetailsService.java
@@ -10,14 +10,14 @@ import cn.bunny.service.service.UserService;
import cn.bunny.vo.system.login.LoginVo;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Configuration;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.stereotype.Component;
import java.util.List;
-@Configuration
+@Component
public class CustomUserDetailsService implements cn.bunny.security.service.CustomUserDetailsService {
@Autowired
private UserMapper userMapper;
@@ -51,4 +51,4 @@ public class CustomUserDetailsService implements cn.bunny.security.service.Custo
public LoginVo login(LoginDto loginDto) {
return userService.login(loginDto);
}
-}
\ No newline at end of file
+}
diff --git a/service/src/main/java/cn/bunny/service/service/impl/UserServiceImpl.java b/service/src/main/java/cn/bunny/service/service/impl/UserServiceImpl.java
index e0cf57c..8690663 100644
--- a/service/src/main/java/cn/bunny/service/service/impl/UserServiceImpl.java
+++ b/service/src/main/java/cn/bunny/service/service/impl/UserServiceImpl.java
@@ -10,9 +10,9 @@ import cn.bunny.entity.system.email.EmailSendInit;
import cn.bunny.entity.system.email.EmailUsers;
import cn.bunny.entity.system.user.User;
import cn.bunny.module.mail.utils.MailSenderUtil;
-import cn.bunny.result.constant.ExceptionConstant;
-import cn.bunny.result.constant.MailMessageConstant;
-import cn.bunny.result.constant.RedisUserConstant;
+import cn.bunny.pojo.result.constant.ExceptionConstant;
+import cn.bunny.pojo.result.constant.MailMessageConstant;
+import cn.bunny.pojo.result.constant.RedisUserConstant;
import cn.bunny.service.mapper.AdminPowerMapper;
import cn.bunny.service.mapper.AdminRoleMapper;
import cn.bunny.service.mapper.EmailUsersMapper;