diff --git a/aos-common/pom.xml b/aos-common/pom.xml
index 384ba33..3a27be0 100644
--- a/aos-common/pom.xml
+++ b/aos-common/pom.xml
@@ -29,5 +29,9 @@
com.alibaba
transmittable-thread-local
+
+ org.springframework
+ spring-beans
+
\ No newline at end of file
diff --git a/aos-common/src/main/java/com/aos/common/copy/AosBeanUtils.java b/aos-common/src/main/java/com/aos/common/copy/AosBeanUtils.java
new file mode 100644
index 0000000..641e966
--- /dev/null
+++ b/aos-common/src/main/java/com/aos/common/copy/AosBeanUtils.java
@@ -0,0 +1,87 @@
+package com.aos.common.copy;
+
+import org.springframework.beans.BeanUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.BiConsumer;
+import java.util.function.Supplier;
+
+/**
+ * @author: wangyl
+ * @date: 2022/11/6
+ * @description: 拷贝
+ */
+public class AosBeanUtils extends BeanUtils {
+
+ /**
+ * list拷贝
+ *
+ * @param sources 源列表
+ * @param target 拷贝到的目标列表类
+ * @return java.util.List
+ * @Date 2021/8/16 0:11
+ * @Author hz21056617
+ * @Version V1.0
+ */
+ public static List copyListProperties(List sources, Supplier target) {
+ return copyListProperties(sources, target, null);
+ }
+
+ /**
+ * list拷贝 可处理数据
+ *
+ * @param sources 源列表
+ * @param target 拷贝到的目标列表类
+ * @param callBack 数据处理方式
+ * @return java.util.List
+ * @Date 2021/8/16 0:11
+ * @Author hz21056617
+ * @Version V1.0
+ */
+ public static List copyListProperties(List sources, Supplier target, BiConsumer callBack) {
+ List list = new ArrayList<>(sources.size());
+ for (S source : sources) {
+ T t = target.get();
+ copyProperties(source, t);
+ if (callBack != null) {
+ callBack.accept(source, t);
+ }
+ list.add(t);
+ }
+ return list;
+ }
+
+ /**
+ * 对象拷贝
+ *
+ * @param sources
+ * @param target
+ * @return T
+ * @Date 2022/11/6
+ * @Author wangyl
+ */
+ public static T copyProperties(S sources, Supplier target) {
+ T t = target.get();
+ copyProperties(sources, t);
+ return t;
+ }
+
+ /**
+ * 对象拷贝
+ *
+ * @param sources
+ * @param target
+ * @return T
+ * @Date 2022/11/6
+ * @Author wangyl
+ */
+ public static T copyProperties(S sources, Supplier target, BiConsumer callBack) {
+ T t = target.get();
+ copyProperties(sources, t);
+ if (callBack != null) {
+ callBack.accept(sources, t);
+ }
+ return t;
+ }
+}
\ No newline at end of file
diff --git a/aos-model-test/pom.xml b/aos-model-test/pom.xml
index 20f4172..81448ac 100644
--- a/aos-model-test/pom.xml
+++ b/aos-model-test/pom.xml
@@ -39,6 +39,11 @@
org.springframework.boot
spring-boot-starter-web
+
+ com.aos
+ aos-web
+ 1.0-SNAPSHOT
+
diff --git a/aos-swagger/src/main/java/com/aos/swagger/conf/SwaggerConfig.java b/aos-swagger/src/main/java/com/aos/swagger/conf/SwaggerConfig.java
index c21b43a..aab80b5 100644
--- a/aos-swagger/src/main/java/com/aos/swagger/conf/SwaggerConfig.java
+++ b/aos-swagger/src/main/java/com/aos/swagger/conf/SwaggerConfig.java
@@ -70,7 +70,7 @@ public class SwaggerConfig implements ImportBeanDefinitionRegistrar {
*/
private ApiInfo apiInfo(String applicationName) {
return new ApiInfoBuilder()
- .title(applicationName + "api列表")
+ .title(applicationName + "-api列表")
.description("aos系统api")
.version("1.0")
.build();
diff --git a/aos-web/pom.xml b/aos-web/pom.xml
index 2b51990..56bf0a3 100644
--- a/aos-web/pom.xml
+++ b/aos-web/pom.xml
@@ -35,5 +35,17 @@
com.github.xiaoymin
knife4j-spring-ui
+
+ org.springframework
+ spring-webmvc
+
+
+ org.apache.tomcat.embed
+ tomcat-embed-core
+
+
+ org.springframework.boot
+ spring-boot
+
\ No newline at end of file
diff --git a/aos-web/src/main/java/com/aos/web/conf/AosWebConf.java b/aos-web/src/main/java/com/aos/web/conf/AosWebConf.java
new file mode 100644
index 0000000..7ca2976
--- /dev/null
+++ b/aos-web/src/main/java/com/aos/web/conf/AosWebConf.java
@@ -0,0 +1,32 @@
+package com.aos.web.conf;
+
+import com.aos.web.filter.BodyRepeatReaderHttpServletFilter;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author: wangyl
+ * @date: 2022/7/26
+ * @description: mybatis-plus配置
+ */
+@Configuration
+public class AosWebConf {
+
+ @Bean
+ public FilterRegistrationBean registerLoginCheckFilter(BodyRepeatReaderHttpServletFilter requireLoginFilter) {
+ FilterRegistrationBean registrationBean = new FilterRegistrationBean();
+ registrationBean.setFilter(requireLoginFilter);
+ registrationBean.addUrlPatterns("/*");
+ registrationBean.setName("bodyRepeatReaderHttpServletFilter");
+ registrationBean.setOrder(0);
+ return registrationBean;
+ }
+
+ @Bean
+ public BodyRepeatReaderHttpServletFilter bodyRepeatReaderHttpServletFilter()
+ {
+ return new BodyRepeatReaderHttpServletFilter();
+ }
+
+}
\ No newline at end of file
diff --git a/aos-web/src/main/java/com/aos/web/filter/BodyRepeatReaderHttpServletFilter.java b/aos-web/src/main/java/com/aos/web/filter/BodyRepeatReaderHttpServletFilter.java
new file mode 100644
index 0000000..df75e26
--- /dev/null
+++ b/aos-web/src/main/java/com/aos/web/filter/BodyRepeatReaderHttpServletFilter.java
@@ -0,0 +1,34 @@
+package com.aos.web.filter;
+
+import lombok.extern.slf4j.Slf4j;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+
+/**
+ * @author: wangyl
+ * @date: 2022/11/7
+ * @description: http包装器,解决流只能被消费一次问题
+ */
+@Slf4j
+public class BodyRepeatReaderHttpServletFilter implements Filter {
+
+ @Override
+ public void init(FilterConfig filterConfig) {
+ if (log.isDebugEnabled()) {
+ log.debug("BodyRepeatReaderHttpServletFilter init");
+ }
+ }
+
+ @Override
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+ if (request instanceof HttpServletRequest) {
+ HttpServletRequest httpServletRequest = (HttpServletRequest) request;
+ ServletRequest requestWrapper = new BodyRepeatReaderHttpServletRequestWrapper(httpServletRequest);
+ chain.doFilter(requestWrapper, response);
+ return;
+ }
+ chain.doFilter(request, response);
+ }
+}
\ No newline at end of file
diff --git a/aos-web/src/main/java/com/aos/web/filter/BodyRepeatReaderHttpServletRequestWrapper.java b/aos-web/src/main/java/com/aos/web/filter/BodyRepeatReaderHttpServletRequestWrapper.java
new file mode 100644
index 0000000..b070244
--- /dev/null
+++ b/aos-web/src/main/java/com/aos/web/filter/BodyRepeatReaderHttpServletRequestWrapper.java
@@ -0,0 +1,78 @@
+package com.aos.web.filter;
+
+import javax.servlet.ReadListener;
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * BodyReaderHttpServletRequestWrapper
+ *
+ * @author luoyongchun
+ * @date 2019/07/02
+ */
+public class BodyRepeatReaderHttpServletRequestWrapper extends HttpServletRequestWrapper {
+
+ protected String body;
+
+ public BodyRepeatReaderHttpServletRequestWrapper(HttpServletRequest request) throws IOException {
+ super(request);
+ body = getBody(request);
+ }
+
+ @Override
+ public ServletInputStream getInputStream() {
+ final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body.getBytes());
+ return new ServletInputStream() {
+ @Override
+ public boolean isFinished() {
+ return false;
+ }
+
+ @Override
+ public boolean isReady() {
+ return false;
+ }
+
+ @Override
+ public void setReadListener(ReadListener readListener) {
+ }
+
+ @Override
+ public int read() {
+ return byteArrayInputStream.read();
+ }
+ };
+ }
+
+ @Override
+ public BufferedReader getReader() {
+ return new BufferedReader(new InputStreamReader(this.getInputStream()));
+ }
+
+ /**
+ * 获取body
+ *
+ * @param httpServletRequest
+ * @return
+ */
+ public static String getBody(HttpServletRequest httpServletRequest) throws IOException {
+ List lines = new ArrayList<>();
+ BufferedReader reader = new BufferedReader(new InputStreamReader(httpServletRequest.getInputStream()));
+ try {
+ String line;
+ while ((line = reader.readLine()) != null) {
+ lines.add(line);
+ }
+ } finally {
+ reader.close();
+ }
+ return String.join("", lines);
+ }
+}
\ No newline at end of file
diff --git a/aos-web/src/main/java/com/aos/web/interceptor/RequestInterceptor.java b/aos-web/src/main/java/com/aos/web/interceptor/RequestInterceptor.java
new file mode 100644
index 0000000..5c67ad2
--- /dev/null
+++ b/aos-web/src/main/java/com/aos/web/interceptor/RequestInterceptor.java
@@ -0,0 +1,51 @@
+package com.aos.web.interceptor;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.util.StringUtils;
+import org.springframework.web.servlet.HandlerInterceptor;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.UUID;
+
+/**
+ * @author: wangyl
+ * @date: 2022/11/6
+ * @description: 请求参数打印拦截器
+ */
+@Slf4j
+public class RequestInterceptor implements HandlerInterceptor, WebMvcConfigurer {
+
+ private final static String TRACE_ID = "trace.id";
+
+ /**
+ * 放入拦截器
+ *
+ * @param registry
+ * @return void
+ * @Date 2022/11/6
+ * @Author wangyl
+ */
+ @Override
+ public void addInterceptors(InterceptorRegistry registry) {
+ registry.addInterceptor(this);
+ WebMvcConfigurer.super.addInterceptors(registry);
+ }
+
+ @Override
+ public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) {
+ String tracId = httpServletRequest.getHeader(TRACE_ID);
+ if (!StringUtils.hasLength(tracId)) {
+ tracId = UUID.randomUUID()
+ .toString();
+ }
+ return true;
+ }
+
+ @Override
+ public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) {
+ }
+}
\ No newline at end of file
diff --git a/aos-web/src/main/resources/META-INF/spring.factories b/aos-web/src/main/resources/META-INF/spring.factories
new file mode 100644
index 0000000..6f5b5b0
--- /dev/null
+++ b/aos-web/src/main/resources/META-INF/spring.factories
@@ -0,0 +1 @@
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.aos.web.conf.AosWebConf
\ No newline at end of file