From b4644366e0e9b89ed17da53d7b03045ede3623d1 Mon Sep 17 00:00:00 2001 From: Tpj <295983632@qq.com> Date: Fri, 3 Jan 2025 13:45:52 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=88=E6=9C=AC=E8=B7=9F=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yudao-gateway/Dockerfile | 2 +- yudao-gateway/pom.xml | 5 -- .../filter/logging/AccessLogFilter.java | 8 +-- .../handler/GlobalExceptionHandler.java | 2 +- .../gateway/util/BannerApplicationRunner.java | 3 +- .../gateway/util/SecurityFrameworkUtils.java | 5 +- .../src/main/resources/application-dev.yaml | 6 +-- .../src/main/resources/application-local.yaml | 6 +-- .../src/main/resources/application-prod.yaml | 14 ++++++ .../src/main/resources/application.yaml | 49 ++++++++++++++++++- 10 files changed, 77 insertions(+), 23 deletions(-) create mode 100644 yudao-gateway/src/main/resources/application-prod.yaml diff --git a/yudao-gateway/Dockerfile b/yudao-gateway/Dockerfile index 9ffb1b922..46037b7d7 100644 --- a/yudao-gateway/Dockerfile +++ b/yudao-gateway/Dockerfile @@ -1,6 +1,6 @@ ## AdoptOpenJDK 停止发布 OpenJDK 二进制,而 Eclipse Temurin 是它的延伸,提供更好的稳定性 ## 感谢复旦核博士的建议!灰子哥,牛皮! -FROM eclipse-temurin:8-jre +FROM eclipse-temurin:21-jre ## 创建目录,并使用它作为工作目录 RUN mkdir -p /yudao-gateway diff --git a/yudao-gateway/pom.xml b/yudao-gateway/pom.xml index 76be121ad..fd75115d9 100644 --- a/yudao-gateway/pom.xml +++ b/yudao-gateway/pom.xml @@ -35,11 +35,6 @@ spring-cloud-starter-gateway - - javax.servlet - javax.servlet-api - - com.github.xiaoymin knife4j-gateway-spring-boot-starter diff --git a/yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/logging/AccessLogFilter.java b/yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/logging/AccessLogFilter.java index ae79bf605..b01343f8d 100644 --- a/yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/logging/AccessLogFilter.java +++ b/yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/logging/AccessLogFilter.java @@ -9,7 +9,6 @@ import cn.iocoder.yudao.gateway.util.WebFrameworkUtils; import com.alibaba.nacos.common.utils.StringUtils; import lombok.extern.slf4j.Slf4j; import org.reactivestreams.Publisher; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GlobalFilter; import org.springframework.cloud.gateway.filter.factory.rewrite.CachedBodyOutputMessage; @@ -22,6 +21,7 @@ import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.core.io.buffer.DataBufferUtils; import org.springframework.core.io.buffer.DefaultDataBufferFactory; import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ReactiveHttpOutputMessage; import org.springframework.http.codec.CodecConfigurer; @@ -37,7 +37,7 @@ import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import java.nio.charset.StandardCharsets; import java.time.LocalDateTime; import java.util.List; @@ -109,7 +109,7 @@ public class AccessLogFilter implements GlobalFilter, Ordered { AccessLog gatewayLog = new AccessLog(); gatewayLog.setRoute(WebFrameworkUtils.getGatewayRoute(exchange)); gatewayLog.setSchema(request.getURI().getScheme()); - gatewayLog.setRequestMethod(request.getMethodValue()); + gatewayLog.setRequestMethod(request.getMethod().name()); gatewayLog.setRequestUrl(request.getURI().getRawPath()); gatewayLog.setQueryParams(request.getQueryParams()); gatewayLog.setRequestHeaders(request.getHeaders()); @@ -188,7 +188,7 @@ public class AccessLogFilter implements GlobalFilter, Ordered { gatewayLog.setUserId(SecurityFrameworkUtils.getLoginUserId(exchange)); gatewayLog.setUserType(SecurityFrameworkUtils.getLoginUserType(exchange)); gatewayLog.setResponseHeaders(response.getHeaders()); - gatewayLog.setHttpStatus(response.getStatusCode()); + gatewayLog.setHttpStatus((HttpStatus) response.getStatusCode()); // 获取响应类型,如果是 json 就打印 String originalResponseContentType = exchange.getAttribute(ServerWebExchangeUtils.ORIGINAL_RESPONSE_CONTENT_TYPE_ATTR); diff --git a/yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/handler/GlobalExceptionHandler.java b/yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/handler/GlobalExceptionHandler.java index 51ca11773..e967cb775 100644 --- a/yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/handler/GlobalExceptionHandler.java +++ b/yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/handler/GlobalExceptionHandler.java @@ -55,7 +55,7 @@ public class GlobalExceptionHandler implements ErrorWebExceptionHandler { // TODO 芋艿:这里要精细化翻译,默认返回用户是看不懂的 ServerHttpRequest request = exchange.getRequest(); log.error("[responseStatusExceptionHandler][uri({}/{}) 发生异常]", request.getURI(), request.getMethod(), ex); - return CommonResult.error(ex.getRawStatusCode(), ex.getReason()); + return CommonResult.error(ex.getStatusCode().value(), ex.getReason()); } /** diff --git a/yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/util/BannerApplicationRunner.java b/yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/util/BannerApplicationRunner.java index a3a0b5a96..34dd9d67b 100644 --- a/yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/util/BannerApplicationRunner.java +++ b/yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/util/BannerApplicationRunner.java @@ -20,7 +20,8 @@ public class BannerApplicationRunner implements ApplicationRunner { @Override public void run(ApplicationArguments args) { ThreadUtil.execute(() -> { - ThreadUtil.sleep(1, TimeUnit.SECONDS); // 延迟 1 秒,保证输出到结尾 + //ThreadUtil.sleep(1, TimeUnit.SECONDS); // 延迟 1 秒,保证输出到结尾 + log.info("Yudao-Gateway 启动成功"); }); } diff --git a/yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/util/SecurityFrameworkUtils.java b/yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/util/SecurityFrameworkUtils.java index 5f15e67bd..d1c0eeaf0 100644 --- a/yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/util/SecurityFrameworkUtils.java +++ b/yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/util/SecurityFrameworkUtils.java @@ -3,13 +3,11 @@ package cn.iocoder.yudao.gateway.util; import cn.hutool.core.map.MapUtil; import cn.iocoder.yudao.framework.common.util.json.JsonUtils; import cn.iocoder.yudao.gateway.filter.security.LoginUser; -import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.util.StringUtils; import org.springframework.web.server.ServerWebExchange; -import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; @@ -106,11 +104,10 @@ public class SecurityFrameworkUtils { * @param builder 请求 * @param user 用户 */ - @SneakyThrows public static void setLoginUserHeader(ServerHttpRequest.Builder builder, LoginUser user) { try { String userStr = JsonUtils.toJsonString(user); - userStr = URLEncoder.encode(userStr, StandardCharsets.UTF_8.name()); // 编码,避免中文乱码 + userStr = URLEncoder.encode(userStr, StandardCharsets.UTF_8); // 编码,避免中文乱码 builder.header(LOGIN_USER_HEADER, userStr); } catch (Exception ex) { log.error("[setLoginUserHeader][序列化 user({}) 发生异常]", user, ex); diff --git a/yudao-gateway/src/main/resources/application-dev.yaml b/yudao-gateway/src/main/resources/application-dev.yaml index 570439c11..1e8cfa328 100644 --- a/yudao-gateway/src/main/resources/application-dev.yaml +++ b/yudao-gateway/src/main/resources/application-dev.yaml @@ -3,9 +3,9 @@ spring: cloud: nacos: - server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - username: # Nacos 账号 - password: # Nacos 密码 + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP diff --git a/yudao-gateway/src/main/resources/application-local.yaml b/yudao-gateway/src/main/resources/application-local.yaml index a7132bd6f..87ee37421 100644 --- a/yudao-gateway/src/main/resources/application-local.yaml +++ b/yudao-gateway/src/main/resources/application-local.yaml @@ -3,9 +3,9 @@ spring: cloud: nacos: - server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - username: # Nacos 账号 - password: # Nacos 密码 + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP diff --git a/yudao-gateway/src/main/resources/application-prod.yaml b/yudao-gateway/src/main/resources/application-prod.yaml new file mode 100644 index 000000000..1e8cfa328 --- /dev/null +++ b/yudao-gateway/src/main/resources/application-prod.yaml @@ -0,0 +1,14 @@ +--- #################### 注册中心 + 配置中心相关配置 #################### + +spring: + cloud: + nacos: + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 + discovery: # 【配置中心】配置项 + namespace: dev # 命名空间。这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + config: # 【注册中心】配置项 + namespace: dev # 命名空间。这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP \ No newline at end of file diff --git a/yudao-gateway/src/main/resources/application.yaml b/yudao-gateway/src/main/resources/application.yaml index f59435246..402e5389b 100644 --- a/yudao-gateway/src/main/resources/application.yaml +++ b/yudao-gateway/src/main/resources/application.yaml @@ -18,6 +18,45 @@ spring: gateway: # 路由配置项,对应 RouteDefinition 数组 routes: + ## hsfx-server 服务 + - id: hsfx-admin-api # 路由的编号 + uri: grayLb://hsfx-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/admin-api/hsfx/** + filters: + - RewritePath=/admin-api/hsfx/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v2/api-docs + - id: hsfx-app-api # 路由的编号 + uri: grayLb://hsfx-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/app-api/hsfx/** + filters: + - RewritePath=/app-api/hsfx/v3/api-docs, /v3/api-docs + ## hshy-server 服务 + - id: hshy-admin-api # 路由的编号 + uri: grayLb://hshy-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/admin-api/hshy/** + filters: + - RewritePath=/admin-api/hshy/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v2/api-docs + - id: hshy-app-api # 路由的编号 + uri: grayLb://hshy-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/app-api/hshy/** + filters: + - RewritePath=/app-api/hshy/v3/api-docs, /v3/api-docs + ## hrmrg-server 服务 + - id: hrmrg-admin-api # 路由的编号 + uri: grayLb://hrmrg-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/admin-api/hrmrg/** + filters: + - RewritePath=/admin-api/hrmrg/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v2/api-docs + - id: hrmrg-app-api # 路由的编号 + uri: grayLb://hrmrg-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/app-api/hrmrg/** + filters: + - RewritePath=/app-api/hrmrg/v3/api-docs, /v3/api-docs ## system-server 服务 - id: system-admin-api # 路由的编号 uri: grayLb://system-server @@ -185,6 +224,15 @@ knife4j: gateway: enabled: true routes: + - name: hsfx-server + service-name: hsfx-server + url: /admin-api/hsfx/v3/api-docs + - name: hshy-server + service-name: hshy-server + url: /admin-api/hshy/v3/api-docs + - name: hrmrg-server + service-name: hrmrg-server + url: /admin-api/hrmrg/v3/api-docs - name: system-server service-name: system-server url: /admin-api/system/v3/api-docs @@ -224,7 +272,6 @@ knife4j: - name: ai-server service-name: ai-server url: /admin-api/ai/v3/api-docs - --- #################### 芋道相关配置 #################### yudao: