From be5b656a706543fe2c06cd72bab96860d5140282 Mon Sep 17 00:00:00 2001
From: bunny <1319900154@qq.com>
Date: Thu, 23 May 2024 10:14:14 +0800
Subject: [PATCH] =?UTF-8?q?feat(=E6=96=B0=E5=A2=9E):=20:rocket:=20netty?=
=?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/compiler.xml | 24 +
.idea/encodings.xml | 16 +
.idea/misc.xml | 1 +
netty/.gitignore | 33 +
netty/common/common-generator/pom.xml | 70 ++
.../cn/bunny/common/generator/NewCodeGet.java | 83 ++
.../cn/bunny/common/generator/OldCodeGet.java | 57 +
netty/common/common-utils/pom.xml | 27 +
.../cn/bunny/common/utils/CommentUtil.java | 51 +
.../java/cn/bunny/common/utils/FileUtil.java | 25 +
netty/common/pom.xml | 30 +
netty/common/service-utils/pom.xml | 57 +
.../common/service/config/Knife4jConfig.java | 46 +
.../config/MyBatisPlusFieldConfig.java | 39 +
.../service/config/MybatisPlusConfig.java | 42 +
.../service/config/RedisConfiguration.java | 98 ++
.../common/service/context/BaseContext.java | 52 +
.../service/exception/BunnyException.java | 33 +
.../exception/GlobalExceptionHandler.java | 82 ++
.../properties/SnowflakeProperties.java | 25 +
.../bunny/common/service/utils/EmptyUtil.java | 21 +
.../bunny/common/service/utils/HttpUtil.java | 206 ++++
.../bunny/common/service/utils/JwtHelper.java | 50 +
.../common/service/utils/ResponseUtil.java | 26 +
.../service/utils/SnowflakeIdGenerator.java | 149 +++
netty/model/pom.xml | 80 ++
.../bunny/dto/article/LoadArticleListDto.java | 22 +
.../bunny/dto/article/LoadUserArticleDto.java | 15 +
.../cn/bunny/dto/common/CommentPostDto.java | 19 +
.../cn/bunny/dto/common/CommentQueryDto.java | 16 +
.../cn/bunny/dto/common/QueryTopTypeDto.java | 15 +
.../cn/bunny/dto/email/EmailTemplateDto.java | 21 +
.../cn/bunny/dto/email/EmailUsersDto.java | 30 +
.../main/java/cn/bunny/dto/user/LoginDto.java | 19 +
.../java/cn/bunny/dto/user/RegisterDto.java | 17 +
.../java/cn/bunny/dto/user/ResetPwdDto.java | 16 +
.../java/cn/bunny/dto/user/UserInfoDto.java | 22 +
.../bunny/dto/user/UserIntegralRecordDto.java | 15 +
.../cn/bunny/dto/user/UserMessageDto.java | 14 +
.../java/cn/bunny/entity/base/BaseEntity.java | 41 +
.../bunny/entity/system/admin/AdminPower.java | 58 ++
.../bunny/entity/system/admin/AdminRole.java | 55 +
.../entity/system/admin/AdminRolePower.java | 56 +
.../entity/system/admin/AdminUserRole.java | 56 +
.../system/admin/auth/AuthUserRole.java | 21 +
.../bunny/entity/system/article/Article.java | 83 ++
.../entity/system/article/ForumComment.java | 67 ++
.../entity/system/article/IntegralRecord.java | 40 +
.../entity/system/article/LikeRecord.java | 43 +
.../bunny/entity/system/board/ForumBoard.java | 49 +
.../bunny/entity/system/email/EmailSend.java | 29 +
.../entity/system/email/EmailSendInit.java | 20 +
.../entity/system/email/EmailTemplate.java | 42 +
.../bunny/entity/system/email/EmailUsers.java | 49 +
.../cn/bunny/entity/system/file/Files.java | 50 +
.../cn/bunny/entity/system/user/User.java | 61 ++
.../bunny/entity/system/user/UserMessage.java | 58 ++
.../java/cn/bunny/enums/OperationType.java | 8 +
.../src/main/java/cn/bunny/result/Result.java | 173 +++
.../java/cn/bunny/result/ResultCodeEnum.java | 54 +
.../result/constant/ExceptionConstant.java | 52 +
.../result/constant/FileMessageConstant.java | 21 +
.../constant/LocalDateTimeConstant.java | 11 +
.../result/constant/MailMessageConstant.java | 15 +
.../result/constant/RedisUserConstant.java | 67 ++
.../result/constant/SQLAutoFillConstant.java | 14 +
.../result/constant/SecurityConstant.java | 13 +
.../bunny/result/constant/StatusConstant.java | 14 +
.../bunny/result/constant/UserConstant.java | 8 +
.../java/cn/bunny/tree/AbstractTreeNode.java | 11 +
.../main/java/cn/bunny/tree/TreeBuilder.java | 29 +
.../cn/bunny/vo/email/EmailTemplateVo.java | 19 +
.../java/cn/bunny/vo/file/FileInfoVo.java | 32 +
.../java/cn/bunny/vo/page/PageResult.java | 27 +
.../vo/system/article/ForumArticleVo.java | 70 ++
.../bunny/vo/system/board/ForumBoardVo.java | 29 +
.../cn/bunny/vo/system/comment/CommentVo.java | 53 +
.../cn/bunny/vo/system/login/LoginVo.java | 48 +
.../bunny/vo/system/login/ValidateCodeVo.java | 20 +
.../cn/bunny/vo/system/user/UserInfoVo.java | 43 +
.../vo/system/user/UserIntegralRecordVo.java | 33 +
.../vo/system/user/UserMessageCountVo.java | 19 +
.../bunny/vo/system/user/UserMessageVo.java | 43 +
netty/module/module-mail/pom.xml | 26 +
.../cn/bunny/module/mail/template-propties | 23 +
.../module/mail/utils/MailSendCheckUtil.java | 23 +
.../module/mail/utils/MailSenderUtil.java | 167 +++
netty/module/module-minio/pom.xml | 27 +
.../minio/properties/MinioProperties.java | 27 +
.../bunny/module/minio/utils/MinioUtil.java | 982 ++++++++++++++++++
netty/module/module-rabbitMQ/pom.xml | 35 +
.../rabbitMQ/config/RabbitMqConfig.java | 38 +
.../rabbitMQ/consumer/DelayConsumer.java | 9 +
.../rabbitMQ/consumer/DirectConsumer.java | 24 +
.../rabbitMQ/consumer/ErrorConsumer.java | 9 +
.../rabbitMQ/consumer/FanoutConsumer.java | 9 +
.../rabbitMQ/consumer/LazyConsumer.java | 9 +
.../rabbitMQ/consumer/TopicConsumer.java | 9 +
.../rabbitMQ/listener/DelayListener.java | 9 +
.../rabbitMQ/listener/DirectListener.java | 30 +
.../rabbitMQ/listener/ErrorListener.java | 9 +
.../rabbitMQ/listener/FanoutListener.java | 9 +
.../rabbitMQ/listener/LazyListener.java | 9 +
.../rabbitMQ/listener/TopicListener.java | 9 +
netty/module/module-task/pom.xml | 23 +
.../cn/bunny/module/task/TemplateTask.java | 14 +
netty/module/module-websocket/pom.xml | 27 +
.../module/websocket/WebSocketServer.java | 71 ++
.../config/WebSocketConfiguration.java | 13 +
netty/module/pom.xml | 34 +
netty/module/spring-security/pom.xml | 32 +
.../security/config/WebSecurityConfig.java | 95 ++
.../custom/CustomPasswordEncoder.java | 28 +
.../cn/bunny/security/custom/CustomUser.java | 22 +
.../filter/TokenAuthenticationFilter.java | 91 ++
.../filter/TokenLoginFilterService.java | 139 +++
.../handelr/SecurityAccessDeniedHandler.java | 26 +
.../SecurityAuthenticationEntryPoint.java | 37 +
.../SecurityAuthenticationFailureHandler.java | 26 +
.../SecurityAuthenticationSuccessHandler.java | 26 +
.../CustomAuthorizationManagerService.java | 7 +
.../service/CustomUserDetailsService.java | 23 +
netty/pom.xml | 147 +++
netty/service/Dockerfile | 21 +
netty/service/pom.xml | 111 ++
.../cn/bunny/service/ServiceApplication.java | 24 +
.../service/aop/annotation/AutoFill.java | 15 +
.../service/aop/aspect/AutoFillAspect.java | 27 +
.../service/controller/IndexController.java | 18 +
.../service/controller/LoginController.java | 36 +
.../service/mapper/AdminPowerMapper.java | 34 +
.../bunny/service/mapper/AdminRoleMapper.java | 26 +
.../service/mapper/EmailUsersMapper.java | 24 +
.../cn/bunny/service/mapper/UserMapper.java | 25 +
...CustomAuthorizationManagerServiceImpl.java | 36 +
.../security/CustomUserDetailsService.java | 54 +
.../cn/bunny/service/service/UserService.java | 31 +
.../service/service/impl/UserServiceImpl.java | 122 +++
.../src/main/resources/application-dev.yml | 19 +
.../src/main/resources/application.yml | 66 ++
netty/service/src/main/resources/banner.txt | 16 +
netty/service/src/main/resources/favicon.ico | Bin 0 -> 17014 bytes
netty/service/src/main/resources/logback.xml | 61 ++
.../resources/mapper/AdminPowerMapper.xml | 41 +
.../main/resources/mapper/AdminRoleMapper.xml | 29 +
.../resources/mapper/EmailUsersMapper.xml | 30 +
.../src/main/resources/mapper/UserMapper.xml | 39 +
.../cn/bunny/CustomPasswordEncoderTest.java | 27 +
148 files changed, 6773 insertions(+)
create mode 100644 netty/.gitignore
create mode 100644 netty/common/common-generator/pom.xml
create mode 100644 netty/common/common-generator/src/main/java/cn/bunny/common/generator/NewCodeGet.java
create mode 100644 netty/common/common-generator/src/main/java/cn/bunny/common/generator/OldCodeGet.java
create mode 100644 netty/common/common-utils/pom.xml
create mode 100644 netty/common/common-utils/src/main/java/cn/bunny/common/utils/CommentUtil.java
create mode 100644 netty/common/common-utils/src/main/java/cn/bunny/common/utils/FileUtil.java
create mode 100644 netty/common/pom.xml
create mode 100644 netty/common/service-utils/pom.xml
create mode 100644 netty/common/service-utils/src/main/java/cn/bunny/common/service/config/Knife4jConfig.java
create mode 100644 netty/common/service-utils/src/main/java/cn/bunny/common/service/config/MyBatisPlusFieldConfig.java
create mode 100644 netty/common/service-utils/src/main/java/cn/bunny/common/service/config/MybatisPlusConfig.java
create mode 100644 netty/common/service-utils/src/main/java/cn/bunny/common/service/config/RedisConfiguration.java
create mode 100644 netty/common/service-utils/src/main/java/cn/bunny/common/service/context/BaseContext.java
create mode 100644 netty/common/service-utils/src/main/java/cn/bunny/common/service/exception/BunnyException.java
create mode 100644 netty/common/service-utils/src/main/java/cn/bunny/common/service/exception/GlobalExceptionHandler.java
create mode 100644 netty/common/service-utils/src/main/java/cn/bunny/common/service/properties/SnowflakeProperties.java
create mode 100644 netty/common/service-utils/src/main/java/cn/bunny/common/service/utils/EmptyUtil.java
create mode 100644 netty/common/service-utils/src/main/java/cn/bunny/common/service/utils/HttpUtil.java
create mode 100644 netty/common/service-utils/src/main/java/cn/bunny/common/service/utils/JwtHelper.java
create mode 100644 netty/common/service-utils/src/main/java/cn/bunny/common/service/utils/ResponseUtil.java
create mode 100644 netty/common/service-utils/src/main/java/cn/bunny/common/service/utils/SnowflakeIdGenerator.java
create mode 100644 netty/model/pom.xml
create mode 100644 netty/model/src/main/java/cn/bunny/dto/article/LoadArticleListDto.java
create mode 100644 netty/model/src/main/java/cn/bunny/dto/article/LoadUserArticleDto.java
create mode 100644 netty/model/src/main/java/cn/bunny/dto/common/CommentPostDto.java
create mode 100644 netty/model/src/main/java/cn/bunny/dto/common/CommentQueryDto.java
create mode 100644 netty/model/src/main/java/cn/bunny/dto/common/QueryTopTypeDto.java
create mode 100644 netty/model/src/main/java/cn/bunny/dto/email/EmailTemplateDto.java
create mode 100644 netty/model/src/main/java/cn/bunny/dto/email/EmailUsersDto.java
create mode 100644 netty/model/src/main/java/cn/bunny/dto/user/LoginDto.java
create mode 100644 netty/model/src/main/java/cn/bunny/dto/user/RegisterDto.java
create mode 100644 netty/model/src/main/java/cn/bunny/dto/user/ResetPwdDto.java
create mode 100644 netty/model/src/main/java/cn/bunny/dto/user/UserInfoDto.java
create mode 100644 netty/model/src/main/java/cn/bunny/dto/user/UserIntegralRecordDto.java
create mode 100644 netty/model/src/main/java/cn/bunny/dto/user/UserMessageDto.java
create mode 100644 netty/model/src/main/java/cn/bunny/entity/base/BaseEntity.java
create mode 100644 netty/model/src/main/java/cn/bunny/entity/system/admin/AdminPower.java
create mode 100644 netty/model/src/main/java/cn/bunny/entity/system/admin/AdminRole.java
create mode 100644 netty/model/src/main/java/cn/bunny/entity/system/admin/AdminRolePower.java
create mode 100644 netty/model/src/main/java/cn/bunny/entity/system/admin/AdminUserRole.java
create mode 100644 netty/model/src/main/java/cn/bunny/entity/system/admin/auth/AuthUserRole.java
create mode 100644 netty/model/src/main/java/cn/bunny/entity/system/article/Article.java
create mode 100644 netty/model/src/main/java/cn/bunny/entity/system/article/ForumComment.java
create mode 100644 netty/model/src/main/java/cn/bunny/entity/system/article/IntegralRecord.java
create mode 100644 netty/model/src/main/java/cn/bunny/entity/system/article/LikeRecord.java
create mode 100644 netty/model/src/main/java/cn/bunny/entity/system/board/ForumBoard.java
create mode 100644 netty/model/src/main/java/cn/bunny/entity/system/email/EmailSend.java
create mode 100644 netty/model/src/main/java/cn/bunny/entity/system/email/EmailSendInit.java
create mode 100644 netty/model/src/main/java/cn/bunny/entity/system/email/EmailTemplate.java
create mode 100644 netty/model/src/main/java/cn/bunny/entity/system/email/EmailUsers.java
create mode 100644 netty/model/src/main/java/cn/bunny/entity/system/file/Files.java
create mode 100644 netty/model/src/main/java/cn/bunny/entity/system/user/User.java
create mode 100644 netty/model/src/main/java/cn/bunny/entity/system/user/UserMessage.java
create mode 100644 netty/model/src/main/java/cn/bunny/enums/OperationType.java
create mode 100644 netty/model/src/main/java/cn/bunny/result/Result.java
create mode 100644 netty/model/src/main/java/cn/bunny/result/ResultCodeEnum.java
create mode 100644 netty/model/src/main/java/cn/bunny/result/constant/ExceptionConstant.java
create mode 100644 netty/model/src/main/java/cn/bunny/result/constant/FileMessageConstant.java
create mode 100644 netty/model/src/main/java/cn/bunny/result/constant/LocalDateTimeConstant.java
create mode 100644 netty/model/src/main/java/cn/bunny/result/constant/MailMessageConstant.java
create mode 100644 netty/model/src/main/java/cn/bunny/result/constant/RedisUserConstant.java
create mode 100644 netty/model/src/main/java/cn/bunny/result/constant/SQLAutoFillConstant.java
create mode 100644 netty/model/src/main/java/cn/bunny/result/constant/SecurityConstant.java
create mode 100644 netty/model/src/main/java/cn/bunny/result/constant/StatusConstant.java
create mode 100644 netty/model/src/main/java/cn/bunny/result/constant/UserConstant.java
create mode 100644 netty/model/src/main/java/cn/bunny/tree/AbstractTreeNode.java
create mode 100644 netty/model/src/main/java/cn/bunny/tree/TreeBuilder.java
create mode 100644 netty/model/src/main/java/cn/bunny/vo/email/EmailTemplateVo.java
create mode 100644 netty/model/src/main/java/cn/bunny/vo/file/FileInfoVo.java
create mode 100644 netty/model/src/main/java/cn/bunny/vo/page/PageResult.java
create mode 100644 netty/model/src/main/java/cn/bunny/vo/system/article/ForumArticleVo.java
create mode 100644 netty/model/src/main/java/cn/bunny/vo/system/board/ForumBoardVo.java
create mode 100644 netty/model/src/main/java/cn/bunny/vo/system/comment/CommentVo.java
create mode 100644 netty/model/src/main/java/cn/bunny/vo/system/login/LoginVo.java
create mode 100644 netty/model/src/main/java/cn/bunny/vo/system/login/ValidateCodeVo.java
create mode 100644 netty/model/src/main/java/cn/bunny/vo/system/user/UserInfoVo.java
create mode 100644 netty/model/src/main/java/cn/bunny/vo/system/user/UserIntegralRecordVo.java
create mode 100644 netty/model/src/main/java/cn/bunny/vo/system/user/UserMessageCountVo.java
create mode 100644 netty/model/src/main/java/cn/bunny/vo/system/user/UserMessageVo.java
create mode 100644 netty/module/module-mail/pom.xml
create mode 100644 netty/module/module-mail/src/main/java/cn/bunny/module/mail/template-propties
create mode 100644 netty/module/module-mail/src/main/java/cn/bunny/module/mail/utils/MailSendCheckUtil.java
create mode 100644 netty/module/module-mail/src/main/java/cn/bunny/module/mail/utils/MailSenderUtil.java
create mode 100644 netty/module/module-minio/pom.xml
create mode 100644 netty/module/module-minio/src/main/java/cn/bunny/module/minio/properties/MinioProperties.java
create mode 100644 netty/module/module-minio/src/main/java/cn/bunny/module/minio/utils/MinioUtil.java
create mode 100644 netty/module/module-rabbitMQ/pom.xml
create mode 100644 netty/module/module-rabbitMQ/src/main/java/cn/bunny/module/rabbitMQ/config/RabbitMqConfig.java
create mode 100644 netty/module/module-rabbitMQ/src/main/java/cn/bunny/module/rabbitMQ/consumer/DelayConsumer.java
create mode 100644 netty/module/module-rabbitMQ/src/main/java/cn/bunny/module/rabbitMQ/consumer/DirectConsumer.java
create mode 100644 netty/module/module-rabbitMQ/src/main/java/cn/bunny/module/rabbitMQ/consumer/ErrorConsumer.java
create mode 100644 netty/module/module-rabbitMQ/src/main/java/cn/bunny/module/rabbitMQ/consumer/FanoutConsumer.java
create mode 100644 netty/module/module-rabbitMQ/src/main/java/cn/bunny/module/rabbitMQ/consumer/LazyConsumer.java
create mode 100644 netty/module/module-rabbitMQ/src/main/java/cn/bunny/module/rabbitMQ/consumer/TopicConsumer.java
create mode 100644 netty/module/module-rabbitMQ/src/main/java/cn/bunny/module/rabbitMQ/listener/DelayListener.java
create mode 100644 netty/module/module-rabbitMQ/src/main/java/cn/bunny/module/rabbitMQ/listener/DirectListener.java
create mode 100644 netty/module/module-rabbitMQ/src/main/java/cn/bunny/module/rabbitMQ/listener/ErrorListener.java
create mode 100644 netty/module/module-rabbitMQ/src/main/java/cn/bunny/module/rabbitMQ/listener/FanoutListener.java
create mode 100644 netty/module/module-rabbitMQ/src/main/java/cn/bunny/module/rabbitMQ/listener/LazyListener.java
create mode 100644 netty/module/module-rabbitMQ/src/main/java/cn/bunny/module/rabbitMQ/listener/TopicListener.java
create mode 100644 netty/module/module-task/pom.xml
create mode 100644 netty/module/module-task/src/main/java/cn/bunny/module/task/TemplateTask.java
create mode 100644 netty/module/module-websocket/pom.xml
create mode 100644 netty/module/module-websocket/src/main/java/cn/bunny/module/websocket/WebSocketServer.java
create mode 100644 netty/module/module-websocket/src/main/java/cn/bunny/module/websocket/config/WebSocketConfiguration.java
create mode 100644 netty/module/pom.xml
create mode 100644 netty/module/spring-security/pom.xml
create mode 100644 netty/module/spring-security/src/main/java/cn/bunny/security/config/WebSecurityConfig.java
create mode 100644 netty/module/spring-security/src/main/java/cn/bunny/security/custom/CustomPasswordEncoder.java
create mode 100644 netty/module/spring-security/src/main/java/cn/bunny/security/custom/CustomUser.java
create mode 100644 netty/module/spring-security/src/main/java/cn/bunny/security/filter/TokenAuthenticationFilter.java
create mode 100644 netty/module/spring-security/src/main/java/cn/bunny/security/filter/TokenLoginFilterService.java
create mode 100644 netty/module/spring-security/src/main/java/cn/bunny/security/handelr/SecurityAccessDeniedHandler.java
create mode 100644 netty/module/spring-security/src/main/java/cn/bunny/security/handelr/SecurityAuthenticationEntryPoint.java
create mode 100644 netty/module/spring-security/src/main/java/cn/bunny/security/handelr/SecurityAuthenticationFailureHandler.java
create mode 100644 netty/module/spring-security/src/main/java/cn/bunny/security/handelr/SecurityAuthenticationSuccessHandler.java
create mode 100644 netty/module/spring-security/src/main/java/cn/bunny/security/service/CustomAuthorizationManagerService.java
create mode 100644 netty/module/spring-security/src/main/java/cn/bunny/security/service/CustomUserDetailsService.java
create mode 100644 netty/pom.xml
create mode 100644 netty/service/Dockerfile
create mode 100644 netty/service/pom.xml
create mode 100644 netty/service/src/main/java/cn/bunny/service/ServiceApplication.java
create mode 100644 netty/service/src/main/java/cn/bunny/service/aop/annotation/AutoFill.java
create mode 100644 netty/service/src/main/java/cn/bunny/service/aop/aspect/AutoFillAspect.java
create mode 100644 netty/service/src/main/java/cn/bunny/service/controller/IndexController.java
create mode 100644 netty/service/src/main/java/cn/bunny/service/controller/LoginController.java
create mode 100644 netty/service/src/main/java/cn/bunny/service/mapper/AdminPowerMapper.java
create mode 100644 netty/service/src/main/java/cn/bunny/service/mapper/AdminRoleMapper.java
create mode 100644 netty/service/src/main/java/cn/bunny/service/mapper/EmailUsersMapper.java
create mode 100644 netty/service/src/main/java/cn/bunny/service/mapper/UserMapper.java
create mode 100644 netty/service/src/main/java/cn/bunny/service/security/CustomAuthorizationManagerServiceImpl.java
create mode 100644 netty/service/src/main/java/cn/bunny/service/security/CustomUserDetailsService.java
create mode 100644 netty/service/src/main/java/cn/bunny/service/service/UserService.java
create mode 100644 netty/service/src/main/java/cn/bunny/service/service/impl/UserServiceImpl.java
create mode 100644 netty/service/src/main/resources/application-dev.yml
create mode 100644 netty/service/src/main/resources/application.yml
create mode 100644 netty/service/src/main/resources/banner.txt
create mode 100644 netty/service/src/main/resources/favicon.ico
create mode 100644 netty/service/src/main/resources/logback.xml
create mode 100644 netty/service/src/main/resources/mapper/AdminPowerMapper.xml
create mode 100644 netty/service/src/main/resources/mapper/AdminRoleMapper.xml
create mode 100644 netty/service/src/main/resources/mapper/EmailUsersMapper.xml
create mode 100644 netty/service/src/main/resources/mapper/UserMapper.xml
create mode 100644 netty/service/src/test/java/cn/bunny/CustomPasswordEncoderTest.java
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index 667a8df..91dae2f 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -7,8 +7,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
index 7ecaa0f..de949f4 100644
--- a/.idea/encodings.xml
+++ b/.idea/encodings.xml
@@ -4,5 +4,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index b7686d0..583a849 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -5,6 +5,7 @@
diff --git a/netty/.gitignore b/netty/.gitignore
new file mode 100644
index 0000000..359dca5
--- /dev/null
+++ b/netty/.gitignore
@@ -0,0 +1,33 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+logs/
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
diff --git a/netty/common/common-generator/pom.xml b/netty/common/common-generator/pom.xml
new file mode 100644
index 0000000..c99ab7e
--- /dev/null
+++ b/netty/common/common-generator/pom.xml
@@ -0,0 +1,70 @@
+
+ 4.0.0
+
+ cn.bunny
+ common
+ 0.0.1-SNAPSHOT
+
+
+ common-generator
+ jar
+
+ common-utils
+ https://maven.apache.org
+
+
+ UTF-8
+
+
+
+
+ org.projectlombok
+ lombok
+
+
+ javax.xml.bind
+ jaxb-api
+ 2.1
+
+
+
+ mysql
+ mysql-connector-java
+
+
+
+ com.zaxxer
+ HikariCP
+ 5.1.0
+
+
+
+ com.baomidou
+ mybatis-plus-spring-boot3-starter
+
+
+
+ com.baomidou
+ mybatis-plus-generator
+ 3.5.6
+
+
+ org.apache.velocity
+ velocity-engine-core
+ 2.3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/netty/common/common-generator/src/main/java/cn/bunny/common/generator/NewCodeGet.java b/netty/common/common-generator/src/main/java/cn/bunny/common/generator/NewCodeGet.java
new file mode 100644
index 0000000..27d0fe9
--- /dev/null
+++ b/netty/common/common-generator/src/main/java/cn/bunny/common/generator/NewCodeGet.java
@@ -0,0 +1,83 @@
+package cn.bunny.common.generator;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.generator.FastAutoGenerator;
+import com.baomidou.mybatisplus.generator.config.OutputFile;
+import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.Collections;
+
+public class NewCodeGet {
+ // 数据连接
+ public static final String sqlHost = "jdbc:mysql://106.15.251.123:3305/bunny_docs?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true";
+ // 作者名称
+ public static final String author = "Bunny";
+ // 公共路径
+ public static final String outputDir = "F:\\web项目\\PC\\BunnyNote\\BunnyBBS-server\\service\\service-web";
+ // 实体类名称
+ public static final String entity = "Bunny";
+
+ public static void main(String[] args) {
+ Generation("article");
+ }
+
+ /**
+ * 根据表名生成相应结构代码
+ *
+ * @param tableName 表名
+ */
+ public static void Generation(String... tableName) {
+ // TODO 修改数据库路径、账户、密码
+ FastAutoGenerator.create(sqlHost, "root", "02120212")
+ .globalConfig(builder -> {
+ // 添加作者名称
+ builder.author(author)
+ // 启用swagger
+ .enableSwagger()
+ // 指定输出目录
+ .outputDir(outputDir + "/src/main/java");
+ })
+ .packageConfig(builder -> {
+ builder.entity(entity)// 实体类包名
+ // TODO 父包名。如果为空,将下面子包名必须写全部, 否则就只需写子包名
+ .parent("cn.bunny.service.web")
+ .controller("controller")// 控制层包名
+ .mapper("mapper")// mapper层包名
+ .service("service")// service层包名
+ .serviceImpl("service.impl")// service实现类包名
+ // 自定义mapper.xml文件输出目录
+ .pathInfo(Collections.singletonMap(OutputFile.xml, outputDir + "/src/main/resources/mapper"));
+ })
+ .strategyConfig(builder -> {
+ // 设置要生成的表名
+ builder.addInclude(tableName)
+ //.addTablePrefix("sys_")// TODO 设置表前缀过滤
+ .entityBuilder()
+ .enableLombok()
+ .enableChainModel()
+ .naming(NamingStrategy.underline_to_camel)// 数据表映射实体命名策略:默认下划线转驼峰underline_to_camel
+ .columnNaming(NamingStrategy.underline_to_camel)// 表字段映射实体属性命名规则:默认null,不指定按照naming执行
+ .idType(IdType.AUTO)// TODO 添加全局主键类型
+ .formatFileName("%s")// 格式化实体名称,%s取消首字母I,
+ .mapperBuilder()
+ .mapperAnnotation(Mapper.class)// 开启mapper注解
+ .enableBaseResultMap()// 启用xml文件中的BaseResultMap 生成
+ .enableBaseColumnList()// 启用xml文件中的BaseColumnList
+ .formatMapperFileName("%sMapper")// 格式化Dao类名称
+ .formatXmlFileName("%sMapper")// 格式化xml文件名称
+ .serviceBuilder()
+ .formatServiceFileName("%sService")// 格式化 service 接口文件名称
+ .formatServiceImplFileName("%sServiceImpl")// 格式化 service 接口文件名称
+ .controllerBuilder()
+ .enableRestStyle();
+ })
+ // .injectionConfig(consumer -> {
+ // Map customFile = new HashMap<>();
+ // // 配置DTO(需要的话)但是需要有能配置Dto的模板引擎,比如freemarker,但是这里我们用的VelocityEngine,因此不多作介绍
+ // customFile.put(outputDir, "/src/main/resources/templates/entityDTO.java.ftl");
+ // consumer.customFile(customFile);
+ // })
+ .execute();
+ }
+}
diff --git a/netty/common/common-generator/src/main/java/cn/bunny/common/generator/OldCodeGet.java b/netty/common/common-generator/src/main/java/cn/bunny/common/generator/OldCodeGet.java
new file mode 100644
index 0000000..d43819c
--- /dev/null
+++ b/netty/common/common-generator/src/main/java/cn/bunny/common/generator/OldCodeGet.java
@@ -0,0 +1,57 @@
+package cn.bunny.common.generator;
+
+public class OldCodeGet {
+ public static void main(String[] args) {
+ // // 1、创建代码生成器
+ // AutoGenerator mpg = new AutoGenerator();
+ //
+ // // 2、全局配置
+ // // 全局配置
+ // GlobalConfig gc = new GlobalConfig();
+ // // TODO 需要修改路径名称
+ // gc.setOutputDir("F:\\web项目\\Bunny-Cli\\Java\\java-template\\service" + "/src/main/java");
+ // gc.setServiceName("%sService"); // 去掉Service接口的首字母I
+ // gc.setAuthor("bunny");
+ // gc.setOpen(false);
+ // mpg.setGlobalConfig(gc);
+ //
+ // // 3、数据源配置
+ // DataSourceConfig dsc = new DataSourceConfig();
+ // // TODO 需要修改数据库
+ // dsc.setUrl("jdbc:mysql://106.15.251.123:3305/guigu-oa?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true");
+ // dsc.setDriverName("com.mysql.cj.jdbc.Driver");
+ // dsc.setUsername("root");
+ // dsc.setPassword("02120212");
+ // dsc.setDbType(DbType.MYSQL);
+ // mpg.setDataSource(dsc);
+ //
+ // // 4、包配置
+ // PackageConfig pc = new PackageConfig();
+ // pc.setParent("cn.bunny");
+ // // TODO 需要修改模块名
+ // pc.setModuleName("service");
+ // pc.setController("controller");
+ // pc.setService("service");
+ // pc.setMapper("mapper");
+ // mpg.setPackageInfo(pc);
+ //
+ // // 5、策略配置
+ // StrategyConfig strategy = getStrategyConfig();
+ // mpg.setStrategy(strategy);
+ //
+ // // 6、执行
+ // mpg.execute();
+ // }
+ //
+ // private static StrategyConfig getStrategyConfig() {
+ // StrategyConfig strategy = new StrategyConfig();
+ // // TODO 要生成的表
+ // strategy.setInclude("sys_menu", "sys_role_menu");
+ // strategy.setNaming(NamingStrategy.underline_to_camel);// 数据库表映射到实体的命名策略
+ // strategy.setColumnNaming(NamingStrategy.underline_to_camel);// 数据库表字段映射到实体的命名策略
+ // strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作
+ // strategy.setRestControllerStyle(true); // restful api风格控制器
+ // strategy.setControllerMappingHyphenStyle(true); // url中驼峰转连字符
+ // return strategy;
+ }
+}
diff --git a/netty/common/common-utils/pom.xml b/netty/common/common-utils/pom.xml
new file mode 100644
index 0000000..f832c59
--- /dev/null
+++ b/netty/common/common-utils/pom.xml
@@ -0,0 +1,27 @@
+
+ 4.0.0
+
+ cn.bunny
+ common
+ 0.0.1-SNAPSHOT
+
+
+ common-utils
+ jar
+
+ common-utils
+ https://maven.apache.org
+
+
+ UTF-8
+
+
+
+
+ cn.bunny
+ model
+ 0.0.1-SNAPSHOT
+
+
+
diff --git a/netty/common/common-utils/src/main/java/cn/bunny/common/utils/CommentUtil.java b/netty/common/common-utils/src/main/java/cn/bunny/common/utils/CommentUtil.java
new file mode 100644
index 0000000..b733f66
--- /dev/null
+++ b/netty/common/common-utils/src/main/java/cn/bunny/common/utils/CommentUtil.java
@@ -0,0 +1,51 @@
+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/netty/common/common-utils/src/main/java/cn/bunny/common/utils/FileUtil.java b/netty/common/common-utils/src/main/java/cn/bunny/common/utils/FileUtil.java
new file mode 100644
index 0000000..739253c
--- /dev/null
+++ b/netty/common/common-utils/src/main/java/cn/bunny/common/utils/FileUtil.java
@@ -0,0 +1,25 @@
+package cn.bunny.common.utils;
+
+public class FileUtil {
+ public static String getSize(Long fileSize) {
+ double fileSizeInKB = fileSize / 1024.00;
+ double fileSizeInMB = fileSizeInKB / 1024;
+ double fileSizeInGB = fileSizeInMB / 1024;
+
+ String size;
+ if (fileSizeInGB >= 1) {
+ fileSizeInGB = Double.parseDouble(String.format("%.2f", fileSizeInGB));
+ size = fileSizeInGB + "GB";
+ } else if (fileSizeInMB >= 1) {
+ fileSizeInMB = Double.parseDouble(String.format("%.2f", fileSizeInMB));
+ size = fileSizeInMB + "MB";
+ } else if (fileSizeInKB >= 1) {
+ fileSizeInKB = Double.parseDouble(String.format("%.2f", fileSizeInKB));
+ size = fileSizeInKB + "KB";
+ } else {
+ size = fileSize + "B";
+ }
+
+ return size;
+ }
+}
diff --git a/netty/common/pom.xml b/netty/common/pom.xml
new file mode 100644
index 0000000..c04ed68
--- /dev/null
+++ b/netty/common/pom.xml
@@ -0,0 +1,30 @@
+
+ 4.0.0
+
+ cn.bunny
+ bunny-template
+ 0.0.1-SNAPSHOT
+
+
+ common
+ pom
+ common Maven Webapp
+ https://maven.apache.org
+
+ service-utils
+ common-generator
+ common-utils
+
+
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jsr310
+
+
+ io.jsonwebtoken
+ jjwt
+
+
+
diff --git a/netty/common/service-utils/pom.xml b/netty/common/service-utils/pom.xml
new file mode 100644
index 0000000..3a326b2
--- /dev/null
+++ b/netty/common/service-utils/pom.xml
@@ -0,0 +1,57 @@
+
+ 4.0.0
+
+ cn.bunny
+ common
+ 0.0.1-SNAPSHOT
+
+
+ service-utils
+ jar
+ service-utils
+ https://maven.apache.org
+
+
+ UTF-8
+
+
+
+
+ cn.bunny
+ model
+ 0.0.1-SNAPSHOT
+
+
+
+ org.apache.httpcomponents
+ httpclient
+ 4.5.14
+
+
+
+ com.github.xiaoymin
+ knife4j-openapi3-jakarta-spring-boot-starter
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+
+ org.redisson
+ redisson
+ 3.26.1
+
+
+
+ com.github.pagehelper
+ pagehelper
+
+
+
diff --git a/netty/common/service-utils/src/main/java/cn/bunny/common/service/config/Knife4jConfig.java b/netty/common/service-utils/src/main/java/cn/bunny/common/service/config/Knife4jConfig.java
new file mode 100644
index 0000000..5abefce
--- /dev/null
+++ b/netty/common/service-utils/src/main/java/cn/bunny/common/service/config/Knife4jConfig.java
@@ -0,0 +1,46 @@
+package cn.bunny.common.service.config;
+
+import io.swagger.v3.oas.models.ExternalDocumentation;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.oas.models.info.Contact;
+import io.swagger.v3.oas.models.info.Info;
+import io.swagger.v3.oas.models.info.License;
+import lombok.extern.slf4j.Slf4j;
+import org.springdoc.core.models.GroupedOpenApi;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@Slf4j
+public class Knife4jConfig {
+ @Bean
+ public OpenAPI openAPI() {
+ log.info("Knife4jConfig===>配置knife4j");
+ // 作者等信息
+ Contact contact = new Contact().name("Bunny").email("1319900154@qq.com").url("http://z-bunny.com");
+ // 使用协议
+ License license = new License().name("MIT").url("http://MUT.com");
+ // 相关信息
+ Info info = new Info().title("Bunny-Java-Template").description("Bunny的Java模板").version("v1.0.0").contact(contact).license(license);
+
+ return new OpenAPI().info(info).externalDocs(new ExternalDocumentation());
+ }
+
+ // 前台相关分类接口
+ @Bean
+ public GroupedOpenApi groupedOpenApi() {
+ return GroupedOpenApi.builder().group("前台接口管理").pathsToMatch("/api/**").build();
+ }
+
+ // 管理员相关分类接口
+ @Bean
+ public GroupedOpenApi groupedOpenAdminApi() {
+ return GroupedOpenApi.builder().group("管理员接口请求").pathsToMatch("/admin/**").build();
+ }
+
+ // 测试相关分类接口
+ @Bean
+ public GroupedOpenApi testGroupedOpenApi() {
+ return GroupedOpenApi.builder().group("测试相关分类接口").pathsToMatch("/test/**").build();
+ }
+}
diff --git a/netty/common/service-utils/src/main/java/cn/bunny/common/service/config/MyBatisPlusFieldConfig.java b/netty/common/service-utils/src/main/java/cn/bunny/common/service/config/MyBatisPlusFieldConfig.java
new file mode 100644
index 0000000..d32b125
--- /dev/null
+++ b/netty/common/service-utils/src/main/java/cn/bunny/common/service/config/MyBatisPlusFieldConfig.java
@@ -0,0 +1,39 @@
+package cn.bunny.common.service.config;
+
+import cn.bunny.common.service.context.BaseContext;
+import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
+import org.apache.ibatis.reflection.MetaObject;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+
+/**
+ * 配置MP在修改和新增时的操作
+ */
+@Component
+public class MyBatisPlusFieldConfig implements MetaObjectHandler {
+
+ /**
+ * 使用mp做添加操作时候,这个方法执行
+ */
+ @Override
+ public void insertFill(MetaObject metaObject) {
+ // 设置属性值
+ this.setFieldValByName("createTime", new Date(), metaObject);
+ this.setFieldValByName("updateTime", new Date(), metaObject);
+ this.setFieldValByName("deleteStatus", 1, metaObject);
+ if (BaseContext.getUsername() != null) {
+ this.setFieldValByName("createBy", BaseContext.getUsername(), metaObject);
+ this.setFieldValByName("updateBy", BaseContext.getUsername(), metaObject);
+ }
+ }
+
+ /**
+ * 使用mp做修改操作时候,这个方法执行
+ */
+ @Override
+ public void updateFill(MetaObject metaObject) {
+ this.setFieldValByName("updateTime", new Date(), metaObject);
+ this.setFieldValByName("updateBy", BaseContext.getUsername(), metaObject);
+ }
+}
diff --git a/netty/common/service-utils/src/main/java/cn/bunny/common/service/config/MybatisPlusConfig.java b/netty/common/service-utils/src/main/java/cn/bunny/common/service/config/MybatisPlusConfig.java
new file mode 100644
index 0000000..013c778
--- /dev/null
+++ b/netty/common/service-utils/src/main/java/cn/bunny/common/service/config/MybatisPlusConfig.java
@@ -0,0 +1,42 @@
+package cn.bunny.common.service.config;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import com.github.pagehelper.PageInterceptor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+/**
+ * Mybatis-Plus配置类
+ */
+@EnableTransactionManagement
+@Configuration
+@Slf4j
+public class MybatisPlusConfig {
+ @Bean
+ public MybatisPlusInterceptor mybatisPlusInterceptor() {
+ log.info("MybatisPlusInterceptor===>注入Mybatis-Plus配置...");
+
+ MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+ // 分页插件
+ PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
+ paginationInnerInterceptor.setMaxLimit(100L);// ? 设置最大分页为100
+ interceptor.addInnerInterceptor(paginationInnerInterceptor);
+ // 乐观锁
+ interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
+ // 防止全表删除
+ interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
+
+ return interceptor;
+ }
+
+ @Bean// pagehelper分页插件需要配的拦截器
+ public PageInterceptor pageInterceptor() {
+ return new PageInterceptor();
+ }
+}
diff --git a/netty/common/service-utils/src/main/java/cn/bunny/common/service/config/RedisConfiguration.java b/netty/common/service-utils/src/main/java/cn/bunny/common/service/config/RedisConfiguration.java
new file mode 100644
index 0000000..1b5c8d7
--- /dev/null
+++ b/netty/common/service-utils/src/main/java/cn/bunny/common/service/config/RedisConfiguration.java
@@ -0,0 +1,98 @@
+package cn.bunny.common.service.config;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.cache.CacheManager;
+import org.springframework.context.annotation.Bean;
+import org.springframework.data.redis.cache.RedisCacheConfiguration;
+import org.springframework.data.redis.cache.RedisCacheManager;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.RedisSerializationContext;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+import org.springframework.stereotype.Component;
+
+import java.time.Duration;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+/**
+ * 设置Redis序列化
+ */
+@Component
+@Slf4j
+public class RedisConfiguration {
+ /**
+ * 使用StringRedisSerializer序列化为字符串
+ */
+ @Bean
+ public RedisTemplate redisTemplate(LettuceConnectionFactory connectionFactory) {
+ log.info("RedisConfiguration===>使用StringRedisSerializer序列化为字符串");
+
+ RedisTemplate redisTemplate = new RedisTemplate<>();
+ redisTemplate.setConnectionFactory(connectionFactory);
+ // 设置key序列化为string
+ redisTemplate.setKeySerializer(new StringRedisSerializer());
+ // 设置value序列化为JSON,使用GenericJackson2JsonRedisSerializer替换默认序列化
+ redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
+ redisTemplate.setHashKeySerializer(new StringRedisSerializer());
+ redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
+
+ return redisTemplate;
+ }
+
+ /**
+ * 解决cache(@Cacheable)把数据缓存到redis中的value是乱码问题
+ */
+ @Bean
+ @SuppressWarnings("all")
+ public CacheManager cacheManager(RedisConnectionFactory factory) {
+ log.info("RedisConfiguration===>解决cache(@Cacheable)把数据缓存到redis中的value是乱码问题");
+
+ // 配置序列化
+ RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
+ .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
+ .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jsonRedisSerializer()))
+ .entryTtl(Duration.ofDays(30));
+
+ return RedisCacheManager.builder(factory).cacheDefaults(config).build();
+ }
+
+ /**
+ * 指定的日期模式
+ */
+ public Jackson2JsonRedisSerializer