package jnpf.base.controller;
|
|
import jnpf.base.model.flow.DataModel;
|
import jnpf.base.model.uploadedit.UploadEditContext;
|
import lombok.extern.slf4j.Slf4j;
|
import org.aspectj.lang.ProceedingJoinPoint;
|
import org.aspectj.lang.annotation.Around;
|
import org.aspectj.lang.annotation.Aspect;
|
import org.springframework.stereotype.Component;
|
|
/** 本次新增附件入口的失败诊断;重新抛出原异常,保留平台原错误响应。 */
|
@Slf4j
|
@Aspect
|
@Component
|
public class UploadFileFailureLog {
|
@Around("execution(public * jnpf.base.controller.UploadEditController.*(..)) || "
|
+ "execution(public * jnpf.base.controller.UploadEditInternalController.*(..)) || "
|
+ "execution(public * jnpf.base.controller.WorkflowFileAccessController.*(..)) || "
|
+ "execution(public * jnpf.base.service.UploadFilePermissionService.prepare(..)) || "
|
+ "execution(public * jnpf.base.service.UploadFilePermissionService.validate(..)) || "
|
+ "execution(public * jnpf.base.service.UploadEditDraftService.prepareSave(..))")
|
public Object recordFailure(ProceedingJoinPoint call) throws Throwable {
|
try {
|
return call.proceed();
|
} catch (Exception error) {
|
// 不输出请求参数、文件地址、正文或认证头;栈位置用于定位实际拒绝处。
|
StackTraceElement[] stack = error.getStackTrace();
|
String modelId = null;
|
String recordId = null;
|
for (Object argument : call.getArgs()) {
|
if (argument instanceof DataModel) {
|
modelId = ((DataModel) argument).getVisualId();
|
recordId = ((DataModel) argument).getMainId();
|
} else if (argument instanceof UploadEditContext) {
|
modelId = ((UploadEditContext) argument).getModelId();
|
recordId = ((UploadEditContext) argument).getRecordId();
|
}
|
}
|
log.warn("Upload file request failed: endpoint={}, modelId={}, recordId={}, errorType={}, origin={}",
|
call.getSignature().toShortString(), modelId, recordId, error.getClass().getSimpleName(),
|
stack.length == 0 ? "unknown" : stack[0]);
|
throw error;
|
}
|
}
|
}
|