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