mirror of
https://gitee.com/durcframework/SOP.git
synced 2025-08-11 12:56:28 +08:00
变更拦截器方法参数
This commit is contained in:
@@ -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问题;优化新增接口注册保存逻辑
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
|
@@ -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<>();
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user