From d780b942227a527584a0320723574b7e00e5fc85 Mon Sep 17 00:00:00 2001
From: lixuliang <lixuliang_hd@126.com>
Date: 星期四, 29 八月 2024 18:02:39 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.11.205:9000/r/se-cloud

---
 .gitignore                                                                       |    2 
 docker-compose/file/bootstrap.yml                                                |   25 ++++++++
 docker-compose/mysql/initdb/se_config_20231204.sql                               |    2 
 se-common/se-common-core/src/main/java/com/se/common/core/utils/StringUtils.java |   21 +++++++
 docker-compose/nginx/conf/nginx.conf                                             |    9 +++
 se-gateway/src/main/java/com/se/gateway/filter/AuthFilter.java                   |   61 ++++++++++----------
 docker-compose/docker-compose.yml                                                |   31 +++++++--
 se-gateway/src/main/java/com/se/gateway/config/CorsConfig.java                   |    1 
 8 files changed, 113 insertions(+), 39 deletions(-)

diff --git a/.gitignore b/.gitignore
index 31adb1f..3aac515 100644
--- a/.gitignore
+++ b/.gitignore
@@ -48,3 +48,5 @@
 *.jar
 /docker-compose/nginx/html
 /docker-compose/mysql/data
+/docker-compose/nacos/logs/nacos_gc.log.0.current
+/docker-compose/redis/data/dump.rdb
diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml
index ffd797f..434bca5 100644
--- a/docker-compose/docker-compose.yml
+++ b/docker-compose/docker-compose.yml
@@ -36,8 +36,8 @@
       - ./nacos/conf/application.properties:/home/nacos/conf/application.properties
     ports:
       - 8848:8848
-      - 9848:9848
-      - 9849:9849
+#      - 9848:9848
+#      - 9849:9849
     depends_on:
       - se-mysql
     networks:
@@ -58,8 +58,8 @@
   # gateway
   se-gateway:
     image: openjdk:8-jre
-    ports:
-      - 9204:8080
+#    ports:
+#      - 9204:8080
     volumes:
       - ./gateway:/data
     environment:
@@ -77,8 +77,8 @@
   # auth
   se-auth:
     image: openjdk:8-jre
-    ports:
-      - 9200:9200
+#    ports:
+#      - 9200:9200
     volumes:
       - ./auth:/data
     environment:
@@ -93,8 +93,8 @@
   # system
   se-system:
     image: openjdk:8-jre
-    ports:
-      - 9201:9201
+#    ports:
+#      - 9201:9201
     volumes:
       - ./system:/data
     environment:
@@ -107,6 +107,21 @@
     networks:
       - network-se
     restart: always
+  # se-file
+  se-file:
+    image: openjdk:8-jre
+#    ports:
+#      - 9300:9300
+    volumes:
+      - ./file:/data
+    environment:
+      TZ: Asia/Shanghai
+    entrypoint: java -jar /data/se-modules-file.jar --spring.config.location=file:/data/
+    depends_on:
+      - se-nacos
+    networks:
+      - network-se
+    restart: always
   # nginx
   se-nginx:
     image: nginx:latest
diff --git a/docker-compose/file/bootstrap.yml b/docker-compose/file/bootstrap.yml
new file mode 100644
index 0000000..10e6f14
--- /dev/null
+++ b/docker-compose/file/bootstrap.yml
@@ -0,0 +1,25 @@
+# Tomcat
+server:
+  port: 9300
+
+# Spring
+spring: 
+  application:
+    # 搴旂敤鍚嶇О
+    name: se-file
+  profiles:
+    # 鐜閰嶇疆
+    active: dev
+  cloud:
+    nacos:
+      discovery:
+        # 鏈嶅姟娉ㄥ唽鍦板潃
+        server-addr: se-nacos:8848
+      config:
+        # 閰嶇疆涓績鍦板潃
+        server-addr: se-nacos:8848
+        # 閰嶇疆鏂囦欢鏍煎紡
+        file-extension: yml
+        # 鍏变韩閰嶇疆
+        shared-configs:
+          - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
diff --git a/docker-compose/mysql/initdb/se_config_20231204.sql b/docker-compose/mysql/initdb/se_config_20231204.sql
index abf0c60..79ed49f 100644
--- a/docker-compose/mysql/initdb/se_config_20231204.sql
+++ b/docker-compose/mysql/initdb/se_config_20231204.sql
@@ -40,7 +40,7 @@
 (5,'se-system-dev.yml','DEFAULT_GROUP','# spring閰嶇疆\nspring:\n  redis:\n    host: se-redis\n    port: 6379\n    password: Redis_s!E_6.2.6\n  datasource:\n    druid:\n      stat-view-servlet:\n        enabled: false\n        loginUsername: admin\n        loginPassword: 123456\n    dynamic:\n      druid:\n        initial-size: 5\n        min-idle: 5\n        maxActive: 20\n        maxWait: 60000\n        connectTimeout: 30000\n        socketTimeout: 60000\n        timeBetweenEvictionRunsMillis: 60000\n        minEvictableIdleTimeMillis: 300000\n        validationQuery: SELECT 1 FROM DUAL\n        testWhileIdle: true\n        testOnBorrow: false\n        testOnReturn: false\n        poolPreparedStatements: true\n        maxPoolPreparedStatementPerConnectionSize: 20\n        filters: stat,slf4j\n        connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n      datasource:\n          # 涓诲簱鏁版嵁婧怽n          master:\n            driver-class-name: com.mysql.cj.jdbc.Driver\n            url: jdbc:mysql://se-mysql:3306/se-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8\n            username: root\n            password: My_Sql_s!E_v5.7\n          # 浠庡簱鏁版嵁婧怽n          # slave:\n            # username: \n            # password: \n            # url: \n            # driver-class-name: \n\n# mybatis閰嶇疆\nmybatis:\n    # 鎼滅储鎸囧畾鍖呭埆鍚峔n    typeAliasesPackage: com.se.system\n    # 閰嶇疆mapper鐨勬壂鎻忥紝鎵惧埌鎵�鏈夌殑mapper.xml鏄犲皠鏂囦欢\n    mapperLocations: classpath:mapper/**/*.xml\n\n# swagger閰嶇疆\nswagger:\n  title: 绯荤粺妯″潡鎺ュ彛鏂囨。\n  license: Powered By se','00678c89684ec0b825cb9b71e032db64','2020-11-20 00:00:00','2023-12-04 07:51:28','nacos','0:0:0:0:0:0:0:1','','','绯荤粺妯″潡','null','null','yaml','',''),
 (6,'se-gen-dev.yml','DEFAULT_GROUP','# spring閰嶇疆\nspring:\n  redis:\n    host: se-redis\n    port: 6379\n    password: Redis_s!E_6.2.6\n  datasource:\n    driver-class-name: com.mysql.cj.jdbc.Driver\n    url: jdbc:mysql://se-mysql:3306/se-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8\n    username: root\n    password: My_Sql_s!E_v5.7\n\n# mybatis閰嶇疆\nmybatis:\n    # 鎼滅储鎸囧畾鍖呭埆鍚峔n    typeAliasesPackage: com.se.gen.domain\n    # 閰嶇疆mapper鐨勬壂鎻忥紝鎵惧埌鎵�鏈夌殑mapper.xml鏄犲皠鏂囦欢\n    mapperLocations: classpath:mapper/**/*.xml\n\n# swagger閰嶇疆\nswagger:\n  title: 浠g爜鐢熸垚鎺ュ彛鏂囨。\n  # 浠g爜鐢熸垚\ngen:\n  # 浣滆�匼n  author: se\n  # 榛樿鐢熸垚鍖呰矾寰� system 闇�鏀规垚鑷繁鐨勬ā鍧楀悕绉� 濡� system monitor tool\n  packageName: com.se.system\n  # 鑷姩鍘婚櫎琛ㄥ墠缂�锛岄粯璁ゆ槸false\n  autoRemovePre: false\n  # 琛ㄥ墠缂�锛堢敓鎴愮被鍚嶄笉浼氬寘鍚〃鍓嶇紑锛屽涓敤閫楀彿鍒嗛殧锛塡n  tablePrefix: sys_\n','eb592420b3fceae1402881887b8a6a0d','2020-11-20 00:00:00','2022-09-29 02:49:42','nacos','0:0:0:0:0:0:0:1','','','浠g爜鐢熸垚','null','null','yaml','',''),
 (7,'se-job-dev.yml','DEFAULT_GROUP','# spring閰嶇疆\nspring:\n  redis:\n    host: se-redis\n    port: 6379\n    password: Redis_s!E_6.2.6\n  datasource:\n    driver-class-name: com.mysql.cj.jdbc.Driver\n    url: jdbc:mysql://se-mysql:3306/se-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8\n    username: root\n    password: My_Sql_s!E_v5.7\n\n# mybatis閰嶇疆\nmybatis:\n    # 鎼滅储鎸囧畾鍖呭埆鍚峔n    typeAliasesPackage: com.se.job.domain\n    # 閰嶇疆mapper鐨勬壂鎻忥紝鎵惧埌鎵�鏈夌殑mapper.xml鏄犲皠鏂囦欢\n    mapperLocations: classpath:mapper/**/*.xml\n\n# swagger閰嶇疆\nswagger:\n  title: 瀹氭椂浠诲姟鎺ュ彛鏂囨。\n ','edcf0e3fe13fea07b4ec08b1088f30b3','2020-11-20 00:00:00','2022-09-29 02:50:50','nacos','0:0:0:0:0:0:0:1','','','瀹氭椂浠诲姟','null','null','yaml','',''),
-(8,'se-file-dev.yml','DEFAULT_GROUP','# 鏈湴鏂囦欢涓婁紶    \r\nfile:\r\n    domain: http://127.0.0.1:9300\r\n    path: D:/se/uploadPath\r\n    prefix: /statics\r\n\r\n# FastDFS閰嶇疆\r\nfdfs:\r\n  domain: http://8.129.231.12\r\n  soTimeout: 3000\r\n  connectTimeout: 2000\r\n  trackerList: 8.129.231.12:22122\r\n\r\n# Minio閰嶇疆\r\nminio:\r\n  url: http://8.129.231.12:9000\r\n  accessKey: minioadmin\r\n  secretKey: minioadmin\r\n  bucketName: test','5382b93f3d8059d6068c0501fdd41195','2020-11-20 00:00:00','2020-12-21 21:01:59',NULL,'0:0:0:0:0:0:0:1','','','鏂囦欢鏈嶅姟','null','null','yaml',NULL,''),
+(8,'se-file-dev.yml','DEFAULT_GROUP','# 鏈湴鏂囦欢涓婁紶    \r\nfile:\r\n    domain: http://127.0.0.1:9300\r\n    path: /data/uploadPath\r\n    prefix: /statics\r\n\r\n# FastDFS閰嶇疆\r\nfdfs:\r\n  domain: http://8.129.231.12\r\n  soTimeout: 3000\r\n  connectTimeout: 2000\r\n  trackerList: 8.129.231.12:22122\r\n\r\n# Minio閰嶇疆\r\nminio:\r\n  url: http://8.129.231.12:9000\r\n  accessKey: minioadmin\r\n  secretKey: minioadmin\r\n  bucketName: test','5382b93f3d8059d6068c0501fdd41195','2020-11-20 00:00:00','2020-12-21 21:01:59',NULL,'0:0:0:0:0:0:0:1','','','鏂囦欢鏈嶅姟','null','null','yaml',NULL,''),
 (9,'sentinel-se-gateway','DEFAULT_GROUP','[\r\n    {\r\n        \"resource\": \"se-auth\",\r\n        \"count\": 500,\r\n        \"grade\": 1,\r\n        \"limitApp\": \"default\",\r\n        \"strategy\": 0,\r\n        \"controlBehavior\": 0\r\n    },\r\n	{\r\n        \"resource\": \"se-system\",\r\n        \"count\": 1000,\r\n        \"grade\": 1,\r\n        \"limitApp\": \"default\",\r\n        \"strategy\": 0,\r\n        \"controlBehavior\": 0\r\n    },\r\n	{\r\n        \"resource\": \"se-gen\",\r\n        \"count\": 200,\r\n        \"grade\": 1,\r\n        \"limitApp\": \"default\",\r\n        \"strategy\": 0,\r\n        \"controlBehavior\": 0\r\n    },\r\n	{\r\n        \"resource\": \"se-job\",\r\n        \"count\": 300,\r\n        \"grade\": 1,\r\n        \"limitApp\": \"default\",\r\n        \"strategy\": 0,\r\n        \"controlBehavior\": 0\r\n    }\r\n]','9f3a3069261598f74220bc47958ec252','2020-11-20 00:00:00','2020-11-20 00:00:00',NULL,'0:0:0:0:0:0:0:1','','','闄愭祦绛栫暐','null','null','json',NULL,'');
 
 
diff --git a/docker-compose/nginx/conf/nginx.conf b/docker-compose/nginx/conf/nginx.conf
index e3efd20..47c0c36 100644
--- a/docker-compose/nginx/conf/nginx.conf
+++ b/docker-compose/nginx/conf/nginx.conf
@@ -31,6 +31,15 @@
             try_files $uri $uri/ /sys/;
             #index  index.html index.htm;
         }
+
+        location /se-file/ {
+            proxy_set_header Host $http_host;
+            proxy_set_header X-Real-IP $remote_addr;
+            proxy_set_header REMOTE-HOST $remote_addr;
+            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+            
+            proxy_pass http://se-file:9300/;
+        }
         
         location /prod-api/ {
             proxy_set_header Host $http_host;
diff --git a/se-common/se-common-core/src/main/java/com/se/common/core/utils/StringUtils.java b/se-common/se-common-core/src/main/java/com/se/common/core/utils/StringUtils.java
index 50148dc..3750592 100644
--- a/se-common/se-common-core/src/main/java/com/se/common/core/utils/StringUtils.java
+++ b/se-common/se-common-core/src/main/java/com/se/common/core/utils/StringUtils.java
@@ -6,7 +6,11 @@
 
 import com.se.common.core.constant.Constants;
 import com.se.common.core.text.StrFormatter;
+import org.springframework.http.HttpCookie;
+import org.springframework.http.server.reactive.ServerHttpRequest;
 import org.springframework.util.AntPathMatcher;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.MultiValueMap;
 
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
@@ -609,6 +613,23 @@
         return sb.toString();
     }
 
+    public static String getValueFromCookie(ServerHttpRequest request, String key) {
+        MultiValueMap<String, HttpCookie> cookies = request.getCookies();
+        if (CollectionUtils.isEmpty(cookies)) {
+            return null;
+        }
+
+        for (Map.Entry<String, List<HttpCookie>> itemList  : cookies.entrySet()) {
+            for (HttpCookie cookie :itemList.getValue()) {
+                if (cookie.getName().equals(key)){
+                    return cookie.getValue();
+                }
+            }
+        }
+
+        return null;
+    }
+
     public static String getValueFromCookie(HttpServletRequest request,String key) {
         Cookie[] cookies = request.getCookies();
         if (cookies == null || cookies.length == 0) {
diff --git a/se-gateway/src/main/java/com/se/gateway/config/CorsConfig.java b/se-gateway/src/main/java/com/se/gateway/config/CorsConfig.java
index b6a358f..00385e4 100644
--- a/se-gateway/src/main/java/com/se/gateway/config/CorsConfig.java
+++ b/se-gateway/src/main/java/com/se/gateway/config/CorsConfig.java
@@ -20,6 +20,7 @@
  * @date 2024-08-28
  */
 @Configuration
+@SuppressWarnings("ALL")
 public class CorsConfig
 {
     /**
diff --git a/se-gateway/src/main/java/com/se/gateway/filter/AuthFilter.java b/se-gateway/src/main/java/com/se/gateway/filter/AuthFilter.java
index 52323a6..ca521c2 100644
--- a/se-gateway/src/main/java/com/se/gateway/filter/AuthFilter.java
+++ b/se-gateway/src/main/java/com/se/gateway/filter/AuthFilter.java
@@ -27,8 +27,7 @@
  * @author admin
  */
 @Component
-public class AuthFilter implements GlobalFilter, Ordered
-{
+public class AuthFilter implements GlobalFilter, Ordered {
     private static final Logger log = LoggerFactory.getLogger(AuthFilter.class);
 
     // 鎺掗櫎杩囨护鐨� uri 鍦板潃锛宯acos鑷娣诲姞
@@ -40,37 +39,31 @@
 
 
     @Override
-    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain)
-    {
+    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
         ServerHttpRequest request = exchange.getRequest();
         ServerHttpRequest.Builder mutate = request.mutate();
 
         String url = request.getURI().getPath();
         // 璺宠繃涓嶉渶瑕侀獙璇佺殑璺緞
-        if (StringUtils.matches(url, ignoreWhite.getWhites()))
-        {
+        if (StringUtils.matches(url, ignoreWhite.getWhites())) {
             return chain.filter(exchange);
         }
         String token = getToken(request);
-        if (StringUtils.isEmpty(token))
-        {
+        if (StringUtils.isEmpty(token)) {
             return unauthorizedResponse(exchange, "浠ょ墝涓嶈兘涓虹┖");
         }
         Claims claims = JwtUtils.parseToken(token);
-        if (claims == null)
-        {
+        if (claims == null) {
             return unauthorizedResponse(exchange, "浠ょ墝宸茶繃鏈熸垨楠岃瘉涓嶆纭紒");
         }
         String userkey = JwtUtils.getUserKey(claims);
         boolean islogin = redisService.hasKey(getTokenKey(userkey));
-        if (!islogin)
-        {
+        if (!islogin) {
             return unauthorizedResponse(exchange, "鐧诲綍鐘舵�佸凡杩囨湡");
         }
         String userid = JwtUtils.getUserId(claims);
         String username = JwtUtils.getUserName(claims);
-        if (StringUtils.isEmpty(userid) || StringUtils.isEmpty(username))
-        {
+        if (StringUtils.isEmpty(userid) || StringUtils.isEmpty(username)) {
             return unauthorizedResponse(exchange, "浠ょ墝楠岃瘉澶辫触");
         }
 
@@ -83,10 +76,8 @@
         return chain.filter(exchange.mutate().request(mutate.build()).build());
     }
 
-    private void addHeader(ServerHttpRequest.Builder mutate, String name, Object value)
-    {
-        if (value == null)
-        {
+    private void addHeader(ServerHttpRequest.Builder mutate, String name, Object value) {
+        if (value == null) {
             return;
         }
         String valueStr = value.toString();
@@ -94,13 +85,11 @@
         mutate.header(name, valueEncode);
     }
 
-    private void removeHeader(ServerHttpRequest.Builder mutate, String name)
-    {
+    private void removeHeader(ServerHttpRequest.Builder mutate, String name) {
         mutate.headers(httpHeaders -> httpHeaders.remove(name)).build();
     }
 
-    private Mono<Void> unauthorizedResponse(ServerWebExchange exchange, String msg)
-    {
+    private Mono<Void> unauthorizedResponse(ServerWebExchange exchange, String msg) {
         log.error("[閴存潈寮傚父澶勭悊]璇锋眰璺緞:{}", exchange.getRequest().getPath());
         return ServletUtils.webFluxResponseWriter(exchange.getResponse(), msg, HttpStatus.UNAUTHORIZED);
     }
@@ -108,28 +97,40 @@
     /**
      * 鑾峰彇缂撳瓨key
      */
-    private String getTokenKey(String token)
-    {
+    private String getTokenKey(String token) {
         return CacheConstants.LOGIN_TOKEN_KEY + token;
     }
 
     /**
      * 鑾峰彇璇锋眰token
      */
-    private String getToken(ServerHttpRequest request)
-    {
+    private String getToken(ServerHttpRequest request) {
+        // 浠巋eader鑾峰彇token鏍囪瘑
         String token = request.getHeaders().getFirst(TokenConstants.AUTHENTICATION);
+
+        // 浠巙rl鑾峰彇token鏍囪瘑
+        if (StringUtils.isEmpty(token)) {
+            token = request.getQueryParams().getFirst(TokenConstants.ACCESS_TOKEN);
+        }
+        if (StringUtils.isEmpty(token)) {
+            token = request.getQueryParams().getFirst(TokenConstants.TOKEN);
+        }
+
+        // 浠巆ookie鑾峰彇token鏍囪瘑
+        if (StringUtils.isEmpty(token)) {
+            token = StringUtils.getValueFromCookie(request, TokenConstants.COOKIE_TOKEN);
+        }
+
+        //String token = request.getHeaders().getFirst(TokenConstants.AUTHENTICATION);
         // 濡傛灉鍓嶇璁剧疆浜嗕护鐗屽墠缂�锛屽垯瑁佸壀鎺夊墠缂�
-        if (StringUtils.isNotEmpty(token) && token.startsWith(TokenConstants.PREFIX))
-        {
+        if (StringUtils.isNotEmpty(token) && token.startsWith(TokenConstants.PREFIX)) {
             token = token.replaceFirst(TokenConstants.PREFIX, StringUtils.EMPTY);
         }
         return token;
     }
 
     @Override
-    public int getOrder()
-    {
+    public int getOrder() {
         return -200;
     }
 }
\ No newline at end of file

--
Gitblit v1.9.3