diff --git a/.gitignore b/.gitignore
index a1c2a238a965f004ff76978ac1086aa6fe95caea..c4fd7109b9d0836956d6fd5041f860a127d00b87 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,23 +1,12 @@
-# Compiled class file
-*.class
-
-# Log file
-*.log
-
-# BlueJ files
-*.ctxt
-
-# Mobile Tools for Java (J2ME)
-.mtj.tmp/
-
-# Package Files #
-*.jar
-*.war
-*.nar
-*.ear
-*.zip
-*.tar.gz
-*.rar
-
-# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
-hs_err_pid*
+# 基础控制
+## 忽略编辑器文件
+**/.idea
+**/__pycache__
+**/.vscode
+
+target/
+
+## File-based project format:
+*.iws
+*.iml
+*.ipr
\ No newline at end of file
diff --git a/aop/pom.xml b/aop/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4d03d345ed3baf8f47d61a47ef1944d38cea9ec7
--- /dev/null
+++ b/aop/pom.xml
@@ -0,0 +1,86 @@
+
+
+ 4.0.0
+
+ com.duan
+ aop
+ 1.0-SNAPSHOT
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.4.3
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter
+ 2.4.3
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ 2.4.3
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ 2.4.3
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.4
+
+
+
+ junit
+ junit
+ 4.13.1
+ test
+
+
+
+ com.alibaba
+ fastjson
+ 1.2.50
+
+
+
+ com.google.guava
+ guava
+ 20.0
+
+
+
+ org.aspectj
+ aspectjweaver
+
+
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ 3.4.3
+
+
+
+
+ mysql
+ mysql-connector-java
+ 8.0.23
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+
+
+
\ No newline at end of file
diff --git a/aop/src/main/java/com/duan/AopApplication.java b/aop/src/main/java/com/duan/AopApplication.java
new file mode 100644
index 0000000000000000000000000000000000000000..40139736251dc3240cd0ee64790adb7b488b5556
--- /dev/null
+++ b/aop/src/main/java/com/duan/AopApplication.java
@@ -0,0 +1,19 @@
+package com.duan;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description AOPApplication
+ * @since 2024/1/3
+ */
+@SpringBootApplication
+@MapperScan(basePackages = "com.duan.mapper")
+public class AopApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(AopApplication.class);
+ }
+}
diff --git a/aop/src/main/java/com/duan/anno/Log.java b/aop/src/main/java/com/duan/anno/Log.java
new file mode 100644
index 0000000000000000000000000000000000000000..fe6560040fefbe1904e5a3b534f2bbb0ae5f7ebe
--- /dev/null
+++ b/aop/src/main/java/com/duan/anno/Log.java
@@ -0,0 +1,17 @@
+package com.duan.anno;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description Log
+ * @since 2024/4/11
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Log {
+}
diff --git a/aop/src/main/java/com/duan/aspect/LoggingAspect.java b/aop/src/main/java/com/duan/aspect/LoggingAspect.java
new file mode 100644
index 0000000000000000000000000000000000000000..cda55ffa96314f5d96ae65de6f46ef862e0fa641
--- /dev/null
+++ b/aop/src/main/java/com/duan/aspect/LoggingAspect.java
@@ -0,0 +1,89 @@
+package com.duan.aspect;
+
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import java.time.LocalDateTime;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.stream.IntStream;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description LoggingAspect
+ * @since 2024/1/3
+ */
+@Aspect
+@Component
+@Slf4j
+public class LoggingAspect {
+ /**
+ * com.duan.controller 包中公共方法的切入点
+ */
+ @Pointcut("execution(public * com.duan.controller.*.*(..))")
+ public void loggingPointcut(){
+ // 暂不用处理
+ }
+
+ @Around("loggingPointcut()")
+ public Object around(ProceedingJoinPoint pjp) throws Throwable{
+ // 获取类名
+ String className = pjp.getTarget().getClass().getTypeName();
+ // 获取方法名
+ String methodName = pjp.getSignature().getName();
+ // 获取参数名
+ String[] parameterNames = ((MethodSignature) pjp.getSignature()).getParameterNames();
+
+ Object result = null;
+ // 获取参数值
+ Object[] args = pjp.getArgs();
+
+ // 获取请求
+ HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+ // 获取请求的url
+ String url = request.getRequestURL().toString();
+
+
+
+ // 请求参数,以参数名和值为键值对
+ Map paramMap = new HashMap<>();
+ IntStream.range(0, parameterNames.length).forEach(i->paramMap.put(parameterNames[i], args[i]));
+
+ // header参数
+ Enumeration headerNames = request.getHeaderNames();
+ Map headerMap = new HashMap<>();
+ while (headerNames.hasMoreElements()){
+ String headerName = headerNames.nextElement();
+ String headerValue = request.getHeader(headerName);
+ headerMap.put(headerName, headerValue);
+ }
+
+ // 打印请求参数,记录起始时间
+ long start = System.currentTimeMillis();
+ log.info("请求| 请求接口:{} | 类名:{} | 方法:{} | header参数:{} | 参数:{} | 请求时间:{}", url, className, methodName, headerMap, paramMap, LocalDateTime.now());
+
+ try {
+ result = pjp.proceed();
+ System.out.println(result.toString());
+ } catch (Exception e) {
+ log.error("返回| 处理时间:{} 毫秒 | 返回结果 :{}", (System.currentTimeMillis() - start), "failed");
+ throw e;
+ }
+
+ // 获取执行完的时间 打印返回报文
+ log.info("返回| 处理时间:{} 毫秒 | 返回结果 :{}", (System.currentTimeMillis() - start), "success");
+ return result;
+ }
+
+
+}
diff --git a/aop/src/main/java/com/duan/controller/LoginController.java b/aop/src/main/java/com/duan/controller/LoginController.java
new file mode 100644
index 0000000000000000000000000000000000000000..311b2e89f340ac0e1542ae6cbbff82006bedf2e8
--- /dev/null
+++ b/aop/src/main/java/com/duan/controller/LoginController.java
@@ -0,0 +1,28 @@
+package com.duan.controller;
+
+import com.duan.pojo.Result;
+import com.duan.pojo.User;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description LoginController
+ * @since 2023/12/19
+ */
+@RestController
+@Slf4j
+public class LoginController {
+
+ @PostMapping("/login")
+ public Result login(@RequestBody User user){
+ log.info("这是正常日志");
+ if("admin".equals(user.getUserName()) && "123456".equals(user.getPassword())){
+ return Result.success("ok");
+ }
+ return Result.error();
+ }
+}
diff --git a/aop/src/main/java/com/duan/controller/UserController.java b/aop/src/main/java/com/duan/controller/UserController.java
new file mode 100644
index 0000000000000000000000000000000000000000..564969ff19ae0e9dd4c29fa16fd1585a4c02d55b
--- /dev/null
+++ b/aop/src/main/java/com/duan/controller/UserController.java
@@ -0,0 +1,29 @@
+package com.duan.controller;
+
+import com.duan.anno.Log;
+import com.duan.pojo.Result;
+import com.duan.pojo.User;
+import com.duan.service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description UserController
+ * @since 2024/4/15
+ */
+@RestController
+@RequestMapping("/user")
+public class UserController {
+
+ @Autowired
+ private UserService userService;
+
+ @PostMapping("/addUser")
+ @Log
+ public Result addUser(@RequestBody User user){
+ userService.AddUser(user);
+ return Result.success();
+ }
+}
diff --git a/aop/src/main/java/com/duan/mapper/UserMapper.java b/aop/src/main/java/com/duan/mapper/UserMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..5b2bad265a435e91091608bdf8c9a29fd606e368
--- /dev/null
+++ b/aop/src/main/java/com/duan/mapper/UserMapper.java
@@ -0,0 +1,15 @@
+package com.duan.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.duan.pojo.User;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description UserMapper
+ * @since 2024/4/15
+ */
+@Mapper
+public interface UserMapper extends BaseMapper {
+}
diff --git a/aop/src/main/java/com/duan/pojo/Result.java b/aop/src/main/java/com/duan/pojo/Result.java
new file mode 100644
index 0000000000000000000000000000000000000000..b3852789db2a3e75ac88a6d35186a0660cf46c4f
--- /dev/null
+++ b/aop/src/main/java/com/duan/pojo/Result.java
@@ -0,0 +1,34 @@
+package com.duan.pojo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description Result
+ * @since 2023/12/19
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Result {
+
+ private Integer code;
+ private String msg;
+ private Object data;
+
+ public static Result success(){
+ return new Result(1,"success",null);
+ }
+
+ public static Result success(Object data){
+ return new Result(1,"success",data);
+ }
+
+ public static Result error(){
+ return new Result(0,"error",null);
+ }
+
+}
diff --git a/aop/src/main/java/com/duan/pojo/User.java b/aop/src/main/java/com/duan/pojo/User.java
new file mode 100644
index 0000000000000000000000000000000000000000..29c631d714587bfe300d469baaa443fba3f5148a
--- /dev/null
+++ b/aop/src/main/java/com/duan/pojo/User.java
@@ -0,0 +1,33 @@
+package com.duan.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description User
+ * @since 2023/12/19
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("User")
+public class User {
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+ private String userName;
+ private String password;
+
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date updateTime;
+}
diff --git a/aop/src/main/java/com/duan/service/UserService.java b/aop/src/main/java/com/duan/service/UserService.java
new file mode 100644
index 0000000000000000000000000000000000000000..154e54e10969b404512627a69db46ba30c1d0470
--- /dev/null
+++ b/aop/src/main/java/com/duan/service/UserService.java
@@ -0,0 +1,15 @@
+package com.duan.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.duan.pojo.User;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description UserService
+ * @since 2024/4/15
+ */
+public interface UserService extends IService {
+
+ void AddUser(User user);
+}
diff --git a/aop/src/main/java/com/duan/service/impl/UserServiceImpl.java b/aop/src/main/java/com/duan/service/impl/UserServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..2caf29723ff4d583db5906fec541372dd6258a13
--- /dev/null
+++ b/aop/src/main/java/com/duan/service/impl/UserServiceImpl.java
@@ -0,0 +1,25 @@
+package com.duan.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.duan.mapper.UserMapper;
+import com.duan.pojo.User;
+import com.duan.service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description UserServiceImpl
+ * @since 2024/4/15
+ */
+@Service
+public class UserServiceImpl extends ServiceImpl implements UserService {
+
+ @Autowired
+ private UserMapper userMapper;
+ @Override
+ public void AddUser(User user) {
+ userMapper.insert(user);
+ }
+}
diff --git a/aop/src/main/resources/application-dev.yml b/aop/src/main/resources/application-dev.yml
new file mode 100644
index 0000000000000000000000000000000000000000..b3ecc52c3ff461ba42104e24d730f076674a273b
--- /dev/null
+++ b/aop/src/main/resources/application-dev.yml
@@ -0,0 +1,18 @@
+
+
+mybatis-plus:
+ configuration:
+ log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 查看日志
+
+spring:
+ datasource:
+ url: jdbc:mysql://localhost:3306/aop_data?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false
+ username: root
+ password: 123456
+ driver-class-name: com.mysql.cj.jdbc.Driver
+
+mybatis:
+ type-aliases-package: com.duan.pojo
+ configuration:
+ map-underscore-to-camel-case: true
+
diff --git a/aop/src/main/resources/application.yml b/aop/src/main/resources/application.yml
new file mode 100644
index 0000000000000000000000000000000000000000..fc4ee6af2b6b15aaa5168265a78734c31944c37f
--- /dev/null
+++ b/aop/src/main/resources/application.yml
@@ -0,0 +1,9 @@
+server:
+ port: 8082
+ servlet:
+ context-path: /aop # 应用名 localhost:8090/logback
+
+spring:
+ profiles:
+ active: dev
+
diff --git a/aop/src/test/java/com/duan/TestAop.java b/aop/src/test/java/com/duan/TestAop.java
new file mode 100644
index 0000000000000000000000000000000000000000..241b0c1621952f0d5f1ad9ed42ceadc94c4f70a9
--- /dev/null
+++ b/aop/src/test/java/com/duan/TestAop.java
@@ -0,0 +1,40 @@
+package com.duan;
+
+import com.duan.mapper.UserMapper;
+import com.duan.pojo.User;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.Date;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description Test
+ * @since 2024/4/15
+ */
+@SpringBootTest
+@RunWith(SpringRunner.class)
+public class TestAop {
+
+ @Autowired
+ private UserMapper userMapper;
+
+ @Test
+ public void test1(){
+ User user = new User();
+ user.setUserName("admin");
+ user.setPassword("123456");
+ user.setCreateTime(new Date());
+ user.setUpdateTime(new Date());
+
+ userMapper.insert(user);
+
+ }
+
+
+}
diff --git a/excel/pom.xml b/excel/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..57134ff95359f9c1432d6ee31cf007cfd791978d
--- /dev/null
+++ b/excel/pom.xml
@@ -0,0 +1,79 @@
+
+
+ 4.0.0
+
+ com.duan
+ excel
+ 1.0-SNAPSHOT
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.4.3
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter
+ 2.4.3
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ 2.4.3
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ 2.4.3
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.2
+
+
+
+ junit
+ junit
+ 4.13.2
+ test
+
+
+
+
+ com.alibaba
+ fastjson
+ 1.2.50
+
+
+
+ com.google.guava
+ guava
+ 20.0
+
+
+
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ 3.4.3
+
+
+
+
+ mysql
+ mysql-connector-java
+ 8.0.23
+
+
+
+
+
\ No newline at end of file
diff --git a/excel/src/main/java/com/duan/ExcelApplication.java b/excel/src/main/java/com/duan/ExcelApplication.java
new file mode 100644
index 0000000000000000000000000000000000000000..15ae08b4b50d4205292e974b49b4a0ae3c02afb4
--- /dev/null
+++ b/excel/src/main/java/com/duan/ExcelApplication.java
@@ -0,0 +1,17 @@
+package com.duan;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description ExcelApplication
+ * @since 2024/3/20
+ */
+@SpringBootApplication
+public class ExcelApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(ExcelApplication.class);
+ }
+}
diff --git a/excel/src/main/resources/application-dev.yml b/excel/src/main/resources/application-dev.yml
new file mode 100644
index 0000000000000000000000000000000000000000..15809fbaa4ecbe5a546da74bed4d609cf30acde7
--- /dev/null
+++ b/excel/src/main/resources/application-dev.yml
@@ -0,0 +1,18 @@
+
+
+mybatis-plus:
+ configuration:
+ log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 查看日志
+
+spring:
+ datasource:
+ url: jdbc:mysql://localhost:3306/transaction?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false
+ username: root
+ password: 123456
+ driver-class-name: com.mysql.cj.jdbc.Driver
+
+mybatis:
+ type-aliases-package: com.duan.pojo
+ configuration:
+ map-underscore-to-camel-case: true
+
diff --git a/excel/src/main/resources/application.yml b/excel/src/main/resources/application.yml
new file mode 100644
index 0000000000000000000000000000000000000000..4cc9cb52d058a275677e5d2a139c202cf8ad68d5
--- /dev/null
+++ b/excel/src/main/resources/application.yml
@@ -0,0 +1,8 @@
+server:
+ port: 8088
+ servlet:
+ context-path: /excel
+
+spring:
+ profiles:
+ active: dev
diff --git a/filter/pom.xml b/filter/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c8878e71a4dc3edfa090271f1f8982476f2b1d79
--- /dev/null
+++ b/filter/pom.xml
@@ -0,0 +1,37 @@
+
+
+ 4.0.0
+
+ com.duan
+ filter
+ 1.0-SNAPSHOT
+
+
+
+ org.springframework.boot
+ spring-boot-starter
+ 2.4.3
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ 2.4.3
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.2
+
+
+
+ junit
+ junit
+ 4.13.2
+ test
+
+
+
\ No newline at end of file
diff --git a/filter/src/main/java/com/duan/FilterApplication.java b/filter/src/main/java/com/duan/FilterApplication.java
new file mode 100644
index 0000000000000000000000000000000000000000..4e2b948224026803c9a6547203913068aa9af585
--- /dev/null
+++ b/filter/src/main/java/com/duan/FilterApplication.java
@@ -0,0 +1,20 @@
+package com.duan;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.web.servlet.ServletComponentScan;
+
+
+/**
+ * @author db
+ * @version 1.0
+ * @description FilterApplication
+ * @since 2023/12/19
+ */
+//@ServletComponentScan
+@SpringBootApplication
+public class FilterApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(FilterApplication.class);
+ }
+}
diff --git a/filter/src/main/java/com/duan/config/FilterConfig.java b/filter/src/main/java/com/duan/config/FilterConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..89516d813a7ee53fa036c60cd04665465ef99b2c
--- /dev/null
+++ b/filter/src/main/java/com/duan/config/FilterConfig.java
@@ -0,0 +1,35 @@
+package com.duan.config;
+
+import com.duan.filter.TestFilter2;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.servlet.Filter;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description FilterConfig
+ * @since 2023/12/20
+ */
+@Configuration
+public class FilterConfig {
+
+ @Bean
+ public FilterRegistrationBean testFilter2(){
+ FilterRegistrationBean filterFilterRegistrationBean = new FilterRegistrationBean<>();
+ filterFilterRegistrationBean.setEnabled(true); // 是否启动注入过滤器
+ filterFilterRegistrationBean.setFilter(new TestFilter2()); // 设置过滤器
+ filterFilterRegistrationBean.setOrder(1); // 设置过滤器顺序 数字越小越靠前
+ filterFilterRegistrationBean.setName("TestFilter2"); // 设置过滤器名字
+
+ List urlPatterns = new ArrayList<>();
+ urlPatterns.add("/*");
+ filterFilterRegistrationBean.setUrlPatterns(urlPatterns); // 设置要过滤的路径
+
+ return filterFilterRegistrationBean;
+ }
+}
diff --git a/filter/src/main/java/com/duan/controller/LoginController.java b/filter/src/main/java/com/duan/controller/LoginController.java
new file mode 100644
index 0000000000000000000000000000000000000000..26dfd335045990e8f580993c0f8159c6bd58de8a
--- /dev/null
+++ b/filter/src/main/java/com/duan/controller/LoginController.java
@@ -0,0 +1,26 @@
+package com.duan.controller;
+
+import com.duan.pojo.Result;
+import com.duan.pojo.User;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description LoginController
+ * @since 2023/12/19
+ */
+@RestController
+public class LoginController {
+
+ @PostMapping("/login")
+ public Result login(@RequestBody User user){
+ System.out.println("调用Controller中的login方法");
+ if("admin".equals(user.getUsername()) && "123456".equals(user.getPassword())){
+ return Result.success();
+ }
+ return Result.error();
+ }
+}
diff --git a/filter/src/main/java/com/duan/filter/LoginFilter.java b/filter/src/main/java/com/duan/filter/LoginFilter.java
new file mode 100644
index 0000000000000000000000000000000000000000..174fbee774db2fc861bf2fc9dcdb0c3c31e47c92
--- /dev/null
+++ b/filter/src/main/java/com/duan/filter/LoginFilter.java
@@ -0,0 +1,27 @@
+package com.duan.filter;
+
+import javax.servlet.*;
+import javax.servlet.annotation.WebFilter;
+import java.io.IOException;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description LoginFilter
+ * @since 2023/12/19
+ */
+
+//@WebFilter(urlPatterns = "/*")
+public class LoginFilter implements Filter {
+
+ // 拦截方法,只要资源请求被拦截到,就一定会调用此方法
+ @Override
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+ System.out.println("拦截方法执行,拦截了请求");
+
+ System.out.println("放行前逻辑+++++++");
+ chain.doFilter(request,response);
+
+ System.out.println("放行后逻辑——————");
+ }
+}
diff --git a/filter/src/main/java/com/duan/filter/TestFilter.java b/filter/src/main/java/com/duan/filter/TestFilter.java
new file mode 100644
index 0000000000000000000000000000000000000000..df3d0794a9cf8c07dbfd13656b2728b6026912c0
--- /dev/null
+++ b/filter/src/main/java/com/duan/filter/TestFilter.java
@@ -0,0 +1,21 @@
+package com.duan.filter;
+
+import org.springframework.stereotype.Component;
+
+import javax.servlet.*;
+import java.io.IOException;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description TestFilter
+ * @since 2023/12/20
+ */
+//@Component
+//public class TestFilter implements Filter {
+// @Override
+// public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+// System.out.println("通过@Component方式配置过滤器");
+// chain.doFilter(request,response);
+// }
+//}
diff --git a/filter/src/main/java/com/duan/filter/TestFilter2.java b/filter/src/main/java/com/duan/filter/TestFilter2.java
new file mode 100644
index 0000000000000000000000000000000000000000..8689ec91193e75c681793a491d7fe94ce7a21027
--- /dev/null
+++ b/filter/src/main/java/com/duan/filter/TestFilter2.java
@@ -0,0 +1,18 @@
+package com.duan.filter;
+
+import javax.servlet.*;
+import java.io.IOException;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description TestFilter2
+ * @since 2023/12/20
+ */
+public class TestFilter2 implements Filter {
+ @Override
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+ System.out.println("使用@Configration配置过滤器");
+ chain.doFilter(request,response);
+ }
+}
diff --git a/filter/src/main/java/com/duan/pojo/Result.java b/filter/src/main/java/com/duan/pojo/Result.java
new file mode 100644
index 0000000000000000000000000000000000000000..b3852789db2a3e75ac88a6d35186a0660cf46c4f
--- /dev/null
+++ b/filter/src/main/java/com/duan/pojo/Result.java
@@ -0,0 +1,34 @@
+package com.duan.pojo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description Result
+ * @since 2023/12/19
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Result {
+
+ private Integer code;
+ private String msg;
+ private Object data;
+
+ public static Result success(){
+ return new Result(1,"success",null);
+ }
+
+ public static Result success(Object data){
+ return new Result(1,"success",data);
+ }
+
+ public static Result error(){
+ return new Result(0,"error",null);
+ }
+
+}
diff --git a/filter/src/main/java/com/duan/pojo/User.java b/filter/src/main/java/com/duan/pojo/User.java
new file mode 100644
index 0000000000000000000000000000000000000000..1895461f53a2e2cacba36ff0da269fb6f194dda3
--- /dev/null
+++ b/filter/src/main/java/com/duan/pojo/User.java
@@ -0,0 +1,19 @@
+package com.duan.pojo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description User
+ * @since 2023/12/19
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class User {
+ private String username;
+ private String password;
+}
diff --git a/interceptor/pom.xml b/interceptor/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5eaea71a91cd9241099da2a8aa19abced1ba8014
--- /dev/null
+++ b/interceptor/pom.xml
@@ -0,0 +1,44 @@
+
+
+ 4.0.0
+
+ com.duan
+ interceptor
+ 1.0-SNAPSHOT
+
+
+
+ org.springframework.boot
+ spring-boot-starter
+ 2.4.3
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ 2.4.3
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.2
+
+
+
+ junit
+ junit
+ 4.13.2
+ test
+
+
+ com.alibaba
+ fastjson
+ 2.0.15
+ compile
+
+
+
+
\ No newline at end of file
diff --git a/interceptor/src/main/java/com/duan/InterceptorApplication.java b/interceptor/src/main/java/com/duan/InterceptorApplication.java
new file mode 100644
index 0000000000000000000000000000000000000000..efa3d65f063fd9f5f406258adb404718735d0633
--- /dev/null
+++ b/interceptor/src/main/java/com/duan/InterceptorApplication.java
@@ -0,0 +1,19 @@
+package com.duan;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.web.servlet.ServletComponentScan;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description InterceptorApplication
+ * @since 2023/8/31
+ */
+@ServletComponentScan
+@SpringBootApplication
+public class InterceptorApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(InterceptorApplication.class,args);
+ }
+}
diff --git a/interceptor/src/main/java/com/duan/config/LoginInterceptorConfig.java b/interceptor/src/main/java/com/duan/config/LoginInterceptorConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..6b454cacbce84100b4debff8ee64c084bfbe889b
--- /dev/null
+++ b/interceptor/src/main/java/com/duan/config/LoginInterceptorConfig.java
@@ -0,0 +1,26 @@
+package com.duan.config;
+
+import com.duan.handler.LoginInterceptor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description LoginInterceptorConfig 注册拦截器
+ * @since 2023/12/20
+ */
+@Configuration
+public class LoginInterceptorConfig implements WebMvcConfigurer {
+
+ @Autowired
+ private LoginInterceptor loginInterceptor;
+
+ @Override
+ public void addInterceptors(InterceptorRegistry registry){
+ registry.addInterceptor(loginInterceptor).addPathPatterns("/**");
+
+ }
+}
diff --git a/interceptor/src/main/java/com/duan/controller/LoginController.java b/interceptor/src/main/java/com/duan/controller/LoginController.java
new file mode 100644
index 0000000000000000000000000000000000000000..66ac9537aae1a399fe7ff407d9d5d26c9634ded8
--- /dev/null
+++ b/interceptor/src/main/java/com/duan/controller/LoginController.java
@@ -0,0 +1,27 @@
+package com.duan.controller;
+
+import com.duan.pojo.Result;
+import com.duan.pojo.User;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description LoginController
+ * @since 2023/12/19
+ */
+@RestController
+public class LoginController {
+
+ @PostMapping("/login")
+ public Result login(@RequestBody User user){
+ System.out.println("执行LoginController中login方法");
+ if("admin".equals(user.getUsername()) && "123456".equals(user.getPassword())){
+ return Result.success();
+ }
+ return Result.error();
+ }
+}
diff --git a/interceptor/src/main/java/com/duan/handler/LoginInterceptor.java b/interceptor/src/main/java/com/duan/handler/LoginInterceptor.java
new file mode 100644
index 0000000000000000000000000000000000000000..c0a8de35f937b63725b881f48410ffbe2ed996f9
--- /dev/null
+++ b/interceptor/src/main/java/com/duan/handler/LoginInterceptor.java
@@ -0,0 +1,39 @@
+package com.duan.handler;
+
+import org.springframework.lang.Nullable;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.HandlerInterceptor;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description LoginInterceptor
+ * @since 2023/12/20
+ */
+@Component
+public class LoginInterceptor implements HandlerInterceptor {
+
+ // 目标方法执行前调用 true:放行
+ @Override
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
+ System.out.println("preHandle");
+ return true;
+ }
+
+ // 目标方法执行后调用
+ @Override
+ public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
+ System.out.println("postHandle...");
+ }
+
+
+ // 请求处理后调用
+ @Override
+ public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
+ System.out.println("Completion...");
+ }
+}
diff --git a/interceptor/src/main/java/com/duan/pojo/Result.java b/interceptor/src/main/java/com/duan/pojo/Result.java
new file mode 100644
index 0000000000000000000000000000000000000000..b3852789db2a3e75ac88a6d35186a0660cf46c4f
--- /dev/null
+++ b/interceptor/src/main/java/com/duan/pojo/Result.java
@@ -0,0 +1,34 @@
+package com.duan.pojo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description Result
+ * @since 2023/12/19
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Result {
+
+ private Integer code;
+ private String msg;
+ private Object data;
+
+ public static Result success(){
+ return new Result(1,"success",null);
+ }
+
+ public static Result success(Object data){
+ return new Result(1,"success",data);
+ }
+
+ public static Result error(){
+ return new Result(0,"error",null);
+ }
+
+}
diff --git a/interceptor/src/main/java/com/duan/pojo/User.java b/interceptor/src/main/java/com/duan/pojo/User.java
new file mode 100644
index 0000000000000000000000000000000000000000..1895461f53a2e2cacba36ff0da269fb6f194dda3
--- /dev/null
+++ b/interceptor/src/main/java/com/duan/pojo/User.java
@@ -0,0 +1,19 @@
+package com.duan.pojo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description User
+ * @since 2023/12/19
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class User {
+ private String username;
+ private String password;
+}
diff --git a/jwt/pom.xml b/jwt/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..67337c7178aa6c210eb0ab6bc4451b03ce828be8
--- /dev/null
+++ b/jwt/pom.xml
@@ -0,0 +1,40 @@
+
+
+ 4.0.0
+
+ com.duan
+ jwt
+ 1.0-SNAPSHOT
+
+
+
+ org.springframework.boot
+ spring-boot-starter
+ 2.4.3
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ 2.4.3
+
+
+
+ io.jsonwebtoken
+ jjwt
+ 0.9.1
+
+
+
+
+ junit
+ junit
+ 4.13.2
+ test
+
+
+
+
+
\ No newline at end of file
diff --git a/jwt/src/main/java/com/duan/JWTApplication.java b/jwt/src/main/java/com/duan/JWTApplication.java
new file mode 100644
index 0000000000000000000000000000000000000000..40b9a7ce21fc0d6c5cf214017bd8aad6f164128e
--- /dev/null
+++ b/jwt/src/main/java/com/duan/JWTApplication.java
@@ -0,0 +1,18 @@
+package com.duan;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description JWTApplication
+ * @since 2023/12/21
+ */
+@SpringBootApplication
+public class JWTApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(JWTApplication.class);
+ }
+}
diff --git a/jwt/src/main/java/com/duan/controller.java b/jwt/src/main/java/com/duan/controller.java
new file mode 100644
index 0000000000000000000000000000000000000000..122140e819a502820af5fe120c2b006223aa76d5
--- /dev/null
+++ b/jwt/src/main/java/com/duan/controller.java
@@ -0,0 +1,10 @@
+package com.duan;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description controller
+ * @since 2023/12/21
+ */
+public class controller {
+}
diff --git a/jwt/src/main/java/com/utils/JWTUtils.java b/jwt/src/main/java/com/utils/JWTUtils.java
new file mode 100644
index 0000000000000000000000000000000000000000..16ae2a41216b2de6304aec5ba3a61c0ae16c0493
--- /dev/null
+++ b/jwt/src/main/java/com/utils/JWTUtils.java
@@ -0,0 +1,45 @@
+package com.utils;
+
+import io.jsonwebtoken.Claims;
+import io.jsonwebtoken.Jwts;
+import io.jsonwebtoken.SignatureAlgorithm;
+
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description JWTUtils
+ * @since 2023/12/31
+ */
+public class JWTUtils {
+
+ // 密钥
+ private static String signKey = "cxykk1217";
+ // 过期时间
+ private static Long expire = 1000L*60*30; // 30分钟
+
+ /**
+ * 生成JWT
+ * @param claims JWT第二部分负载payload中存储的内容
+ * @return
+ */
+ public static String generateJwt(Map claims){
+ String jwt = Jwts.builder().signWith(SignatureAlgorithm.HS256, signKey)
+ .addClaims(claims)
+ .setExpiration(new Date(System.currentTimeMillis() + expire))
+ .compact();
+
+ return jwt;
+ }
+
+ public static Claims parseJWT(String jwt){
+ Claims claims = Jwts.parser().setSigningKey(signKey)
+ .parseClaimsJws(jwt)
+ .getBody();
+ return claims;
+ }
+
+
+}
diff --git a/jwt/src/test/java/com/duan/JWTTest.java b/jwt/src/test/java/com/duan/JWTTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..f2b9b0abcbecbc65631de9cc0d452e9e1daac3a0
--- /dev/null
+++ b/jwt/src/test/java/com/duan/JWTTest.java
@@ -0,0 +1,46 @@
+package com.duan;
+
+import io.jsonwebtoken.Claims;
+import io.jsonwebtoken.Jwts;
+import io.jsonwebtoken.SignatureAlgorithm;
+import org.junit.Test;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description JWTTest
+ * @since 2023/12/21
+ */
+public class JWTTest {
+
+ /**
+ * 生成令牌
+ */
+ @Test
+ public void getJWT(){
+ Map map = new HashMap<>();
+ map.put("id",1);
+ map.put("username","程序员康康");
+ String jwt = Jwts.builder().signWith(SignatureAlgorithm.HS256, "cxykk1217") // 设置签名算法和密钥
+ .setClaims(map) // 设置给定的数据
+ .setExpiration(new Date(System.currentTimeMillis() + 1000L * 60 * 3))
+ .compact();
+ System.out.println(jwt);
+ }
+
+ /**
+ * 解析令牌
+ */
+ @Test
+ public void parseJwt(){
+ Claims body = Jwts.parser()
+ .setSigningKey("cxykk1217")
+ .parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwiZXhwIjoxNzAzOTkxMjg5LCJ1c2VybmFtZSI6Iueoi-W6j-WRmOW6t-W6tyJ9.Q_xG0pDaG2rkix2rEw2SNS5uBwTS5f0FbzcLFpQ0yJY")
+ .getBody();
+ System.out.println(body);
+ }
+}
diff --git a/log/pom.xml b/log/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7eb7a739c619704eadcec2ec8601427b2e0e0418
--- /dev/null
+++ b/log/pom.xml
@@ -0,0 +1,56 @@
+
+
+ 4.0.0
+
+ com.duan
+ log
+ 1.0-SNAPSHOT
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.4.3
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter
+ 2.4.3
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ 2.4.3
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.2
+
+
+
+ junit
+ junit
+ 4.13.2
+ test
+
+
+
+ com.alibaba
+ fastjson
+ 1.2.50
+
+
+
+ com.google.guava
+ guava
+ 20.0
+
+
+
+
+
\ No newline at end of file
diff --git a/log/src/main/java/com/duan/LogApplication.java b/log/src/main/java/com/duan/LogApplication.java
new file mode 100644
index 0000000000000000000000000000000000000000..425c038ca7af99e09da9b65e3e5cd23fbaae452d
--- /dev/null
+++ b/log/src/main/java/com/duan/LogApplication.java
@@ -0,0 +1,19 @@
+package com.duan;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+import javax.swing.*;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description LogApplication
+ * @since 2024/1/7
+ */
+@SpringBootApplication
+public class LogApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(LogApplication.class);
+ }
+}
diff --git a/log/src/main/java/com/duan/config/HostIpConfig.java b/log/src/main/java/com/duan/config/HostIpConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..3f5ae28b525e4662135780b6e4c3ea6e8d87a12f
--- /dev/null
+++ b/log/src/main/java/com/duan/config/HostIpConfig.java
@@ -0,0 +1,19 @@
+package com.duan.config;
+
+import ch.qos.logback.classic.pattern.ClassicConverter;
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import com.duan.utils.LocalIP;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description HostIpConfig 获得主机IP地址
+ * @since 2024/1/9
+ */
+public class HostIpConfig extends ClassicConverter {
+ @Override
+ public String convert(ILoggingEvent event) {
+ String hostIP = LocalIP.getIpAddress();
+ return hostIP;
+ }
+}
diff --git a/log/src/main/java/com/duan/config/RequestIpConfig.java b/log/src/main/java/com/duan/config/RequestIpConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..95c6d9ce56acfaf6427bf3b2a8a7499e3fcdb9f9
--- /dev/null
+++ b/log/src/main/java/com/duan/config/RequestIpConfig.java
@@ -0,0 +1,29 @@
+package com.duan.config;
+
+import ch.qos.logback.classic.pattern.ClassicConverter;
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import com.duan.utils.IpUtils;
+import org.springframework.web.context.request.RequestAttributes;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description RequestIpConfig 获得请求IP
+ * @since 2024/1/9
+ */
+public class RequestIpConfig extends ClassicConverter {
+ @Override
+ public String convert(ILoggingEvent event) {
+ RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
+ if (requestAttributes == null) {
+ return "127.0.0.1";
+ }
+ HttpServletRequest request = ((ServletRequestAttributes)requestAttributes).getRequest();
+ String requestIP = IpUtils.getIpAddr(request);
+ return requestIP;
+ }
+}
diff --git a/log/src/main/java/com/duan/config/UUIDConfig.java b/log/src/main/java/com/duan/config/UUIDConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..0dc4240855bc0c8e14d4ec3027e521f2e6664f25
--- /dev/null
+++ b/log/src/main/java/com/duan/config/UUIDConfig.java
@@ -0,0 +1,18 @@
+package com.duan.config;
+
+import ch.qos.logback.classic.pattern.ClassicConverter;
+import ch.qos.logback.classic.spi.ILoggingEvent;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description UUIDConfig
+ * @since 2024/1/9
+ */
+public class UUIDConfig extends ClassicConverter {
+ @Override
+ public String convert(ILoggingEvent iLoggingEvent) {
+
+ return "12344556";
+ }
+}
diff --git a/log/src/main/java/com/duan/config/WebConfig.java b/log/src/main/java/com/duan/config/WebConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..e32b8a108a76cce57688cad44d7e618697769dae
--- /dev/null
+++ b/log/src/main/java/com/duan/config/WebConfig.java
@@ -0,0 +1,24 @@
+package com.duan.config;
+
+import com.duan.interceptor.TraceInterceptor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description WebConfig
+ * @since 2024/1/9
+ */
+@Configuration
+public class WebConfig extends WebMvcConfigurerAdapter {
+ @Autowired
+ private TraceInterceptor traceInterceptor;
+
+ @Override
+ public void addInterceptors(InterceptorRegistry registry) {
+ registry.addInterceptor(traceInterceptor);
+ }
+}
diff --git a/log/src/main/java/com/duan/controller/LoginController.java b/log/src/main/java/com/duan/controller/LoginController.java
new file mode 100644
index 0000000000000000000000000000000000000000..e11e49fd63e1390271b5a1a4b292e9535e69d779
--- /dev/null
+++ b/log/src/main/java/com/duan/controller/LoginController.java
@@ -0,0 +1,31 @@
+package com.duan.controller;
+
+
+import com.duan.pojo.Result;
+import com.duan.pojo.User;
+import lombok.extern.slf4j.Slf4j;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description LoginController
+ * @since 2023/12/19
+ */
+@RestController
+@Slf4j
+public class LoginController {
+
+ @PostMapping("/login")
+ public Result login(@RequestBody User user){
+ log.info("这是正常日志");
+ if("admin".equals(user.getUsername()) && "123456".equals(user.getPassword())){
+ return Result.success("ok");
+ }
+ return Result.error();
+ }
+}
diff --git a/log/src/main/java/com/duan/interceptor/TraceInterceptor.java b/log/src/main/java/com/duan/interceptor/TraceInterceptor.java
new file mode 100644
index 0000000000000000000000000000000000000000..a9af6d222ada96f39b4c63b0e874804fe2aa564a
--- /dev/null
+++ b/log/src/main/java/com/duan/interceptor/TraceInterceptor.java
@@ -0,0 +1,29 @@
+package com.duan.interceptor;
+
+import org.slf4j.MDC;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.UUID;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description TraceInterceptor
+ * @since 2024/1/9
+ */
+@Component
+public class TraceInterceptor implements HandlerInterceptor {
+ @Override
+ public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object handler) throws Exception {
+ MDC.put("traceid", UUID.randomUUID().toString());
+ return true;
+ }
+
+ @Override
+ public void afterCompletion(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse,Object handler,Exception e) throws Exception {
+ MDC.remove("traceid");
+ }
+}
diff --git a/log/src/main/java/com/duan/pojo/Result.java b/log/src/main/java/com/duan/pojo/Result.java
new file mode 100644
index 0000000000000000000000000000000000000000..b3852789db2a3e75ac88a6d35186a0660cf46c4f
--- /dev/null
+++ b/log/src/main/java/com/duan/pojo/Result.java
@@ -0,0 +1,34 @@
+package com.duan.pojo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description Result
+ * @since 2023/12/19
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Result {
+
+ private Integer code;
+ private String msg;
+ private Object data;
+
+ public static Result success(){
+ return new Result(1,"success",null);
+ }
+
+ public static Result success(Object data){
+ return new Result(1,"success",data);
+ }
+
+ public static Result error(){
+ return new Result(0,"error",null);
+ }
+
+}
diff --git a/log/src/main/java/com/duan/pojo/User.java b/log/src/main/java/com/duan/pojo/User.java
new file mode 100644
index 0000000000000000000000000000000000000000..1895461f53a2e2cacba36ff0da269fb6f194dda3
--- /dev/null
+++ b/log/src/main/java/com/duan/pojo/User.java
@@ -0,0 +1,19 @@
+package com.duan.pojo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description User
+ * @since 2023/12/19
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class User {
+ private String username;
+ private String password;
+}
diff --git a/log/src/main/java/com/duan/utils/IpUtils.java b/log/src/main/java/com/duan/utils/IpUtils.java
new file mode 100644
index 0000000000000000000000000000000000000000..6f212592d15534a9a25b3d47206fd6176cae8ca8
--- /dev/null
+++ b/log/src/main/java/com/duan/utils/IpUtils.java
@@ -0,0 +1,51 @@
+package com.duan.utils;
+
+
+import com.google.common.base.Strings;
+
+import javax.servlet.http.HttpServletRequest;
+
+public class IpUtils {
+
+ private IpUtils(){
+
+ }
+
+ public static String getIpAddr(HttpServletRequest request) {
+ String xIp = request.getHeader("X-Real-IP");
+ String xFor = request.getHeader("X-Forwarded-For");
+
+ if (!Strings.isNullOrEmpty(xFor) && !"unKnown".equalsIgnoreCase(xFor)) {
+ //多次反向代理后会有多个ip值,第一个ip才是真实ip
+ int index = xFor.indexOf(",");
+ if (index != -1) {
+ return xFor.substring(0, index);
+ } else {
+ return xFor;
+ }
+ }
+ xFor = xIp;
+ if (!Strings.isNullOrEmpty(xFor) && !"unKnown".equalsIgnoreCase(xFor)) {
+ return xFor;
+ }
+ if (Strings.nullToEmpty(xFor).trim().isEmpty() || "unknown".equalsIgnoreCase(xFor)) {
+ xFor = request.getHeader("Proxy-Client-IP");
+ }
+ if (Strings.nullToEmpty(xFor).trim().isEmpty() || "unknown".equalsIgnoreCase(xFor)) {
+ xFor = request.getHeader("WL-Proxy-Client-IP");
+ }
+ if (Strings.nullToEmpty(xFor).trim().isEmpty() || "unknown".equalsIgnoreCase(xFor)) {
+ xFor = request.getHeader("HTTP_CLIENT_IP");
+ }
+ if (Strings.nullToEmpty(xFor).trim().isEmpty() || "unknown".equalsIgnoreCase(xFor)) {
+ xFor = request.getHeader("HTTP_X_FORWARDED_FOR");
+ }
+ if (Strings.nullToEmpty(xFor).trim().isEmpty() || "unknown".equalsIgnoreCase(xFor)) {
+ xFor = request.getRemoteAddr();
+ }
+
+
+ return "0:0:0:0:0:0:0:1".equals(xFor) ? "127.0.0.1" : xFor;
+ }
+
+}
diff --git a/log/src/main/java/com/duan/utils/LocalIP.java b/log/src/main/java/com/duan/utils/LocalIP.java
new file mode 100644
index 0000000000000000000000000000000000000000..3d30cae792fac5531321659840167bf54e0144d5
--- /dev/null
+++ b/log/src/main/java/com/duan/utils/LocalIP.java
@@ -0,0 +1,72 @@
+package com.duan.utils;
+
+import java.net.Inet4Address;
+import java.net.InetAddress;
+import java.net.NetworkInterface;
+import java.util.Enumeration;
+
+public class LocalIP {
+ public static InetAddress getLocalHostExactAddress() {
+ try {
+ InetAddress candidateAddress = null;
+
+ // 从网卡中获取IP
+ Enumeration networkInterfaces = NetworkInterface.getNetworkInterfaces();
+ while (networkInterfaces.hasMoreElements()) {
+ NetworkInterface iface = networkInterfaces.nextElement();
+ // 该网卡接口下的ip会有多个,也需要一个个的遍历,找到自己所需要的
+ for (Enumeration inetAddrs = iface.getInetAddresses(); inetAddrs.hasMoreElements(); ) {
+ InetAddress inetAddr = inetAddrs.nextElement();
+ // 排除loopback回环类型地址(不管是IPv4还是IPv6 只要是回环地址都会返回true)
+ if (!inetAddr.isLoopbackAddress()) {
+ if (inetAddr.isSiteLocalAddress()) {
+ // 如果是site-local地址,就是它了 就是我们要找的
+ // ~~~~~~~~~~~~~绝大部分情况下都会在此处返回你的ip地址值~~~~~~~~~~~~~
+ return inetAddr;
+ }
+
+ // 若不是site-local地址 那就记录下该地址当作候选
+ if (candidateAddress == null) {
+ candidateAddress = inetAddr;
+ }
+
+ }
+ }
+ }
+
+ // 如果出去loopback回环地之外无其它地址了,那就回退到原始方案吧
+ return candidateAddress == null ? InetAddress.getLocalHost() : candidateAddress;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+
+ }
+
+ public static String getIpAddress() {
+ try {
+ //从网卡中获取IP
+ Enumeration allNetInterfaces = NetworkInterface.getNetworkInterfaces();
+ InetAddress ip;
+ while (allNetInterfaces.hasMoreElements()) {
+ NetworkInterface netInterface = (NetworkInterface) allNetInterfaces.nextElement();
+ //用于排除回送接口,非虚拟网卡,未在使用中的网络接口
+ if (!netInterface.isLoopback() && !netInterface.isVirtual() && netInterface.isUp()) {
+ //返回和网络接口绑定的所有IP地址
+ Enumeration addresses = netInterface.getInetAddresses();
+ while (addresses.hasMoreElements()) {
+ ip = addresses.nextElement();
+ if (ip instanceof Inet4Address) {
+ return ip.getHostAddress();
+ }
+ }
+ }
+ }
+ } catch (Exception e) {
+ System.err.println("IP地址获取失败" + e.toString());
+ }
+ return "";
+ }
+
+}
+
diff --git a/log/src/main/resources/application-dev.yml b/log/src/main/resources/application-dev.yml
new file mode 100644
index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc
--- /dev/null
+++ b/log/src/main/resources/application-dev.yml
@@ -0,0 +1 @@
+
diff --git a/log/src/main/resources/application.yml b/log/src/main/resources/application.yml
new file mode 100644
index 0000000000000000000000000000000000000000..53c19bc3a921cb8d0a07a54ede6bdc19d6f5f947
--- /dev/null
+++ b/log/src/main/resources/application.yml
@@ -0,0 +1,8 @@
+server:
+ port: 8082
+ servlet:
+ context-path: /log
+
+spring:
+ profiles:
+ active: dev
diff --git a/log/src/main/resources/logback-spring.xml b/log/src/main/resources/logback-spring.xml
new file mode 100644
index 0000000000000000000000000000000000000000..57488e3c98ddfdff87ef590469683ba2bd5f72bd
--- /dev/null
+++ b/log/src/main/resources/logback-spring.xml
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${CONSOLE_LOG_PATTERN}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
+
+
+
+
+
+
+
+ ${LOG_HOME}/info.log
+
+
+
+
+ ${LOG_HOME}/info.%d{yyyy-MM-dd}.%i.log
+
+ 30
+
+ 1GB
+ 10MB
+
+
+
+
+ UTF-8
+
+ %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
+
+
+
+
+
+ INFO
+
+
+
+
+
+ ${LOG_HOME}/error.log
+
+
+ ${LOG_HOME}/error.%d{yyyy-MM-dd}.%i.log
+ 30
+
+ 1GB
+ 10MB
+
+
+ UTF-8
+
+ %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
+
+
+
+ ERROR
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logback/pom.xml b/logback/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..71fe43dcfa61fac25ed94b382f0d5d6fce0e10eb
--- /dev/null
+++ b/logback/pom.xml
@@ -0,0 +1,67 @@
+
+
+ 4.0.0
+
+ com.duan
+ logback
+ 1.0-SNAPSHOT
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 8
+ 8
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.4.3
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter
+ 2.4.3
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ 2.4.3
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.2
+
+
+
+ junit
+ junit
+ 4.13.2
+ test
+
+
+
+ com.alibaba
+ fastjson
+ 1.2.50
+
+
+
+ com.google.guava
+ guava
+ 20.0
+
+
+
\ No newline at end of file
diff --git a/logback/src/main/java/com/duan/LogbackApplication.java b/logback/src/main/java/com/duan/LogbackApplication.java
new file mode 100644
index 0000000000000000000000000000000000000000..33eb30e162f454d82157b0171cf635d6f8c2f45e
--- /dev/null
+++ b/logback/src/main/java/com/duan/LogbackApplication.java
@@ -0,0 +1,12 @@
+package com.duan;
+
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class LogbackApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(LogbackApplication.class);
+ }
+}
diff --git a/logback/src/main/java/com/duan/config/ControllerResponseAdvice.java b/logback/src/main/java/com/duan/config/ControllerResponseAdvice.java
new file mode 100644
index 0000000000000000000000000000000000000000..3240bc0f7b0254163424ccd1d459da9d64b78d5a
--- /dev/null
+++ b/logback/src/main/java/com/duan/config/ControllerResponseAdvice.java
@@ -0,0 +1,42 @@
+package com.duan.config;
+
+import com.alibaba.fastjson.JSON;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.MethodParameter;
+import org.springframework.http.MediaType;
+import org.springframework.http.server.ServerHttpRequest;
+import org.springframework.http.server.ServerHttpResponse;
+import org.springframework.http.server.ServletServerHttpRequest;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @author db
+ * @version 1.0
+ * @description ControllerResponseAdvice
+ * @since 2024/1/3
+ *
+ * 使用ResponseBodyAdvice对Controller的所有返回值进行封装
+ */
+@ControllerAdvice
+public class ControllerResponseAdvice implements ResponseBodyAdvice