diff --git a/changelog.md b/changelog.md index 3b447c7f..0fa840ae 100755 --- a/changelog.md +++ b/changelog.md @@ -2,6 +2,7 @@ ## 日常更新 +- 2025-03-05:变更拦截器方法参数 - 2025-03-04:拦截器新增init方法,用来做一些初始化工作 - 2025-02-27:新增token校验,com.gitee.sop.gateway.interceptor.internal.TokenValidateInterceptor.checkToken - 2025-02-20:修复Linux环境下启动报错,加载i18n问题;优化新增接口注册保存逻辑 diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/interceptor/RouteInterceptor.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/interceptor/RouteInterceptor.java index ffe49d34..d26f921c 100755 --- a/sop-gateway/src/main/java/com/gitee/sop/gateway/interceptor/RouteInterceptor.java +++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/interceptor/RouteInterceptor.java @@ -1,7 +1,6 @@ package com.gitee.sop.gateway.interceptor; -import com.gitee.sop.gateway.common.ApiInfoDTO; -import com.gitee.sop.gateway.request.ApiRequestContext; +import com.gitee.sop.gateway.common.RouteContext; import org.springframework.context.ApplicationContext; import org.springframework.core.env.Environment; @@ -28,21 +27,19 @@ public interface RouteInterceptor { * 在这个方法中抛出异常会中断接口执行,直接返回错误信息 * * - * @param context context - * @param apiInfoDTO 接口信息 + * @param routeContext routeContext */ - default void preRoute(ApiRequestContext context, ApiInfoDTO apiInfoDTO) { + default void preRoute(RouteContext routeContext) { } /** * 微服务返回结果后执行 * - * @param context context - * @param apiInfoDTO 接口信息 - * @param result 业务返回结果,通常是HashMap + * @param routeContext routeContext + * @param result 业务返回结果,通常是HashMap * @return 返回格式化后的结果, 可对原结果进行修改 */ - default Object afterRoute(ApiRequestContext context, ApiInfoDTO apiInfoDTO, Object result) { + default Object afterRoute(RouteContext routeContext, Object result) { return result; } @@ -58,11 +55,10 @@ public interface RouteInterceptor { /** * 是否匹配,返回true执行拦截器,默认true * - * @param context context - * @param apiInfoDTO 接口信息 + * @param routeContext routeContext * @return 返回true执行拦截器 */ - default boolean match(ApiRequestContext context, ApiInfoDTO apiInfoDTO) { + default boolean match(RouteContext routeContext) { return true; } } diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/interceptor/internal/ResultRouteInterceptor.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/interceptor/internal/ResultRouteInterceptor.java index 2465b46a..f205b1c8 100755 --- a/sop-gateway/src/main/java/com/gitee/sop/gateway/interceptor/internal/ResultRouteInterceptor.java +++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/interceptor/internal/ResultRouteInterceptor.java @@ -1,9 +1,8 @@ package com.gitee.sop.gateway.interceptor.internal; -import com.gitee.sop.gateway.common.ApiInfoDTO; +import com.gitee.sop.gateway.common.RouteContext; import com.gitee.sop.gateway.interceptor.RouteInterceptor; import com.gitee.sop.gateway.interceptor.RouteInterceptorOrders; -import com.gitee.sop.gateway.request.ApiRequestContext; import com.gitee.sop.support.dto.CommonFileData; import com.gitee.sop.support.dto.FileData; import org.springframework.stereotype.Component; @@ -28,7 +27,7 @@ public class ResultRouteInterceptor implements RouteInterceptor { private static final String KEY_BYTES = "bytes"; @Override - public Object afterRoute(ApiRequestContext context, ApiInfoDTO apiInfoDTO, Object result) { + public Object afterRoute(RouteContext routeContext, Object result) { if (result == null) { return new HashMap<>(); } diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/interceptor/internal/TokenValidateInterceptor.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/interceptor/internal/TokenValidateInterceptor.java index a7be2455..dcce0d48 100644 --- a/sop-gateway/src/main/java/com/gitee/sop/gateway/interceptor/internal/TokenValidateInterceptor.java +++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/interceptor/internal/TokenValidateInterceptor.java @@ -1,6 +1,7 @@ package com.gitee.sop.gateway.interceptor.internal; import com.gitee.sop.gateway.common.ApiInfoDTO; +import com.gitee.sop.gateway.common.RouteContext; import com.gitee.sop.gateway.common.enums.YesOrNoEnum; import com.gitee.sop.gateway.exception.ApiException; import com.gitee.sop.gateway.interceptor.RouteInterceptor; @@ -18,18 +19,21 @@ import org.springframework.stereotype.Component; @Slf4j public class TokenValidateInterceptor implements RouteInterceptor { @Override - public void preRoute(ApiRequestContext context, ApiInfoDTO apiInfoDTO) { + public void preRoute(RouteContext routeContext) { + ApiRequestContext apiRequestContext = routeContext.getApiRequestContext(); + ApiInfoDTO apiInfo = routeContext.getApiInfo(); // 走到这里token肯定有值 - String appAuthToken = context.getApiRequest().getAppAuthToken(); + String appAuthToken = apiRequestContext.getApiRequest().getAppAuthToken(); - if (!checkToken(appAuthToken, context, apiInfoDTO)) { - throw new ApiException(ErrorEnum.AOP_INVALID_AUTH_TOKEN, context.getLocale()); + if (!checkToken(appAuthToken, apiRequestContext, apiInfo)) { + throw new ApiException(ErrorEnum.AOP_INVALID_AUTH_TOKEN, apiRequestContext.getLocale()); } } @Override - public boolean match(ApiRequestContext context, ApiInfoDTO apiInfoDTO) { - Integer isNeedToken = apiInfoDTO.getIsNeedToken(); + public boolean match(RouteContext routeContext) { + ApiInfoDTO apiInfo = routeContext.getApiInfo(); + Integer isNeedToken = apiInfo.getIsNeedToken(); return YesOrNoEnum.of(isNeedToken) == YesOrNoEnum.YES; } diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/RouteServiceImpl.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/RouteServiceImpl.java index d3943eb0..0fd9c84e 100755 --- a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/RouteServiceImpl.java +++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/RouteServiceImpl.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.gitee.sop.gateway.common.ApiInfoDTO; import com.gitee.sop.gateway.common.ParamInfoDTO; +import com.gitee.sop.gateway.common.RouteContext; import com.gitee.sop.gateway.exception.ApiException; import com.gitee.sop.gateway.exception.ExceptionExecutor; import com.gitee.sop.gateway.interceptor.RouteInterceptor; @@ -87,12 +88,13 @@ public class RouteServiceImpl implements RouteService { try { // 接口校验 ApiInfoDTO apiInfoDTO = validate(apiRequestContext); + RouteContext routeContext = new RouteContext(apiRequestContext, apiInfoDTO); // 执行拦截器前置动作 - this.doPreRoute(apiRequestContext, apiInfoDTO); + this.doPreRoute(routeContext); // 执行路由,返回微服务结果 Object result = doRoute(apiRequestContext, apiInfoDTO); // 执行拦截器后置动作 - result = this.doAfterRoute(apiRequestContext, apiInfoDTO, result); + result = this.doAfterRoute(routeContext, result); // 结果处理 return resultWrapper.wrap(apiRequestContext, apiInfoDTO, result); } catch (Exception e) { @@ -126,19 +128,19 @@ public class RouteServiceImpl implements RouteService { ); } - protected void doPreRoute(ApiRequestContext apiRequestContext, ApiInfoDTO apiInfoDTO) { + protected void doPreRoute(RouteContext routeContext) { for (RouteInterceptor routeInterceptor : routeInterceptors) { - if (routeInterceptor.match(apiRequestContext, apiInfoDTO)) { - routeInterceptor.preRoute(apiRequestContext, apiInfoDTO); + if (routeInterceptor.match(routeContext)) { + routeInterceptor.preRoute(routeContext); } } } - protected Object doAfterRoute(ApiRequestContext apiRequestContext, ApiInfoDTO apiInfoDTO, Object result) { + protected Object doAfterRoute(RouteContext routeContext, Object result) { Object ret = result; for (RouteInterceptor routeInterceptor : routeInterceptors) { - if (routeInterceptor.match(apiRequestContext, apiInfoDTO)) { - ret = routeInterceptor.afterRoute(apiRequestContext, apiInfoDTO, ret); + if (routeInterceptor.match(routeContext)) { + ret = routeInterceptor.afterRoute(routeContext, ret); } } return ret;