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