feat: 应用开发后端基础框架,初始提交
diff --git a/common/core/pom.xml b/common/core/pom.xml
new file mode 100644
index 0000000..d535132
--- /dev/null
+++ b/common/core/pom.xml
@@ -0,0 +1,74 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>com.supwisdom.institute</groupId>
+    <artifactId>sw-backend-parent</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <relativePath>../../</relativePath>
+  </parent>
+
+  <groupId>com.supwisdom.institute</groupId>
+  <artifactId>sw-backend-common-core</artifactId>
+  <version>0.0.1-SNAPSHOT</version>
+  <packaging>jar</packaging>
+
+  <name>Supwisdom Backend Framework Common Core</name>
+  <description>Supwisdom Backend Framework Common Core project</description>
+
+  <dependencies>
+
+    <dependency>
+      <groupId>org.projectlombok</groupId>
+      <artifactId>lombok</artifactId>
+      <scope>provided</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>javax.servlet</groupId>
+      <artifactId>javax.servlet-api</artifactId>
+      <scope>provided</scope>
+    </dependency>
+
+
+    <dependency>
+      <groupId>org.springframework.cloud</groupId>
+      <artifactId>spring-cloud-starter-openfeign</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>com.alibaba</groupId>
+      <artifactId>fastjson</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-lang3</artifactId>
+    </dependency>
+
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-javadoc-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-release-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>
diff --git a/common/core/src/main/java/com/supwisdom/institute/backend/common/core/transmit/annotation/EnableSimpleUserTransmit.java b/common/core/src/main/java/com/supwisdom/institute/backend/common/core/transmit/annotation/EnableSimpleUserTransmit.java
new file mode 100644
index 0000000..5a094e9
--- /dev/null
+++ b/common/core/src/main/java/com/supwisdom/institute/backend/common/core/transmit/annotation/EnableSimpleUserTransmit.java
@@ -0,0 +1,19 @@
+package com.supwisdom.institute.backend.common.core.transmit.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.springframework.context.annotation.Import;
+
+import com.supwisdom.institute.backend.common.core.transmit.config.SimpleUserTransmitAutoConfiguration;
+
+@Documented
+@Target({ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+@Import({SimpleUserTransmitAutoConfiguration.class})
+public @interface EnableSimpleUserTransmit {
+
+}
diff --git a/common/core/src/main/java/com/supwisdom/institute/backend/common/core/transmit/config/SimpleUserTransmitAutoConfiguration.java b/common/core/src/main/java/com/supwisdom/institute/backend/common/core/transmit/config/SimpleUserTransmitAutoConfiguration.java
new file mode 100644
index 0000000..a3e11ce
--- /dev/null
+++ b/common/core/src/main/java/com/supwisdom/institute/backend/common/core/transmit/config/SimpleUserTransmitAutoConfiguration.java
@@ -0,0 +1,27 @@
+package com.supwisdom.institute.backend.common.core.transmit.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import com.supwisdom.institute.backend.common.core.transmit.feign.SimpleUserTransmitRequestInterceptor;
+import com.supwisdom.institute.backend.common.core.transmit.filter.SimpleUserTransmitFilter;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+@Configuration
+public class SimpleUserTransmitAutoConfiguration {
+  
+  @Bean
+  public SimpleUserTransmitRequestInterceptor simpleUserTransmitRequestInterceptor() {
+    log.debug("-----SimpleUserTransmitRequestInterceptor");
+    return new SimpleUserTransmitRequestInterceptor();
+  }
+
+  @Bean
+  public SimpleUserTransmitFilter simpleUserTransmitFilter() {
+    log.debug("-----SimpleUserTransmitFilter");
+    return new SimpleUserTransmitFilter();
+  }
+  
+}
diff --git a/common/core/src/main/java/com/supwisdom/institute/backend/common/core/transmit/feign/SimpleUserTransmitRequestInterceptor.java b/common/core/src/main/java/com/supwisdom/institute/backend/common/core/transmit/feign/SimpleUserTransmitRequestInterceptor.java
new file mode 100644
index 0000000..be002db
--- /dev/null
+++ b/common/core/src/main/java/com/supwisdom/institute/backend/common/core/transmit/feign/SimpleUserTransmitRequestInterceptor.java
@@ -0,0 +1,31 @@
+package com.supwisdom.institute.backend.common.core.transmit.feign;
+
+import java.net.URLDecoder;
+
+import lombok.extern.slf4j.Slf4j;
+
+import com.alibaba.fastjson.JSONObject;
+import com.supwisdom.institute.backend.common.core.transmit.user.User;
+import com.supwisdom.institute.backend.common.core.transmit.user.UserContext;
+
+import feign.RequestInterceptor;
+import feign.RequestTemplate;
+
+@Slf4j
+public class SimpleUserTransmitRequestInterceptor implements RequestInterceptor {
+
+  @Override
+  public void apply(RequestTemplate template) {
+    User user = UserContext.getUser();
+    if (user != null) {
+      try {
+        String jsonUser = JSONObject.toJSONString(user);
+        String headerValue = new String(URLDecoder.decode(jsonUser,"UTF-8"));
+        template.header(UserContext.KEY_USER_IN_HTTP_HEADER, headerValue);
+      } catch (Exception e) {
+        log.warn("User set error", e);
+      }
+    }
+  }
+
+}
diff --git a/common/core/src/main/java/com/supwisdom/institute/backend/common/core/transmit/filter/SimpleUserTransmitFilter.java b/common/core/src/main/java/com/supwisdom/institute/backend/common/core/transmit/filter/SimpleUserTransmitFilter.java
new file mode 100644
index 0000000..4d8a2dc
--- /dev/null
+++ b/common/core/src/main/java/com/supwisdom/institute/backend/common/core/transmit/filter/SimpleUserTransmitFilter.java
@@ -0,0 +1,55 @@
+package com.supwisdom.institute.backend.common.core.transmit.filter;
+
+import java.io.IOException;
+import java.net.URLDecoder;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.alibaba.fastjson.JSONObject;
+import com.supwisdom.institute.backend.common.core.transmit.user.User;
+import com.supwisdom.institute.backend.common.core.transmit.user.UserContext;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public class SimpleUserTransmitFilter implements Filter {
+
+  @Override
+  public void init(FilterConfig filterConfig) throws ServletException {
+    
+  }
+
+  @Override
+  public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+    HttpServletRequest request = (HttpServletRequest) servletRequest;
+    
+    String headerValue = request.getHeader(UserContext.KEY_USER_IN_HTTP_HEADER);
+    if (StringUtils.isNotBlank(headerValue)) {
+      try {
+        String jsonUser = URLDecoder.decode(headerValue,"UTF-8");
+        
+        User user = JSONObject.parseObject(jsonUser, User.class);
+        
+        UserContext.setUser(user);
+      } catch (Exception e) {
+        log.warn("User get error", e);
+      }
+    }
+    
+    filterChain.doFilter(servletRequest, servletResponse);
+  }
+
+  @Override
+  public void destroy() {
+    
+  }
+
+}
diff --git a/common/core/src/main/java/com/supwisdom/institute/backend/common/core/transmit/user/User.java b/common/core/src/main/java/com/supwisdom/institute/backend/common/core/transmit/user/User.java
new file mode 100644
index 0000000..3d34bc4
--- /dev/null
+++ b/common/core/src/main/java/com/supwisdom/institute/backend/common/core/transmit/user/User.java
@@ -0,0 +1,17 @@
+package com.supwisdom.institute.backend.common.core.transmit.user;
+
+import java.util.List;
+import java.util.Map;
+
+import lombok.Value;
+
+@Value
+public class User {
+  
+  private String username;
+  
+  private List<String> roles;
+  
+  private Map<String, Object> attributes;
+
+}
diff --git a/common/core/src/main/java/com/supwisdom/institute/backend/common/core/transmit/user/UserContext.java b/common/core/src/main/java/com/supwisdom/institute/backend/common/core/transmit/user/UserContext.java
new file mode 100644
index 0000000..00f2e43
--- /dev/null
+++ b/common/core/src/main/java/com/supwisdom/institute/backend/common/core/transmit/user/UserContext.java
@@ -0,0 +1,21 @@
+package com.supwisdom.institute.backend.common.core.transmit.user;
+
+public class UserContext {
+  
+  private static ThreadLocal<User> user = new ThreadLocal<User>();
+  
+  public static String KEY_USER_IN_HTTP_HEADER = "X-FORWARD-USER";
+  
+  private UserContext() {
+    
+  }
+  
+  public static User getUser() {
+    return user.get();
+  }
+  
+  public static void setUser(User value) {
+    user.set(value);
+  }
+
+}