变更拦截器方法参数

This commit is contained in:
六如
2025-03-05 22:32:55 +08:00
parent 2724e34dc9
commit 7ffb3b8d9c
5 changed files with 31 additions and 29 deletions

View File

@@ -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问题优化新增接口注册保存逻辑

View File

@@ -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 {
* 在这个方法中抛出异常会中断接口执行,直接返回错误信息
* </pre>
*
* @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 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;
}
}

View File

@@ -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<>();
}

View File

@@ -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;
}

View File

@@ -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;