import io.github.ibuildthecloud.gdapi.request.ApiRequest; //導入方法依賴的package包/類
@Override
public void logRequest(ApiRequest request, Policy policy) {
if (policy == null || request == null || request.getType() == null) {
return;
}
if (Schema.Method.GET.isMethod(request.getMethod()) ||
BLACK_LIST_TYPES.contains(request.getType().toLowerCase())) {
return;
}
Map data = new HashMap<>();
putInAsString(data, request.getType(), "requestObject", "Failed to convert request object to json.", request.getRequestObject());
putInAsString(data, request.getType(), "responseObject", "Failed to convert response object to json.", request.getResponseObject());
data.put("responseCode", request.getResponseCode());
Identity user = null;
for (Identity identity: policy.getIdentities()){
if (identity.getExternalIdType().contains("user")){
user = identity;
break;
}
}
if (user == null && policy.getIdentities().size() == 1){
user = policy.getIdentities().iterator().next();
}
long runtime = ((long) request.getAttribute("requestEndTime")) - ((long)request.getAttribute("requestStartTime"));
String authType = (String) request.getAttribute(AccountConstants.AUTH_TYPE);
String resourceId =request.getResponseObject() instanceof Resource ? ((Resource) request.getResponseObject()).getId(): null;
String resourceType = request.getType();
String eventType = "api." + convertResourceType(resourceType) + "." + (StringUtils.isNotBlank(request.getAction()) ?
request.getAction() :convertToAction(request.getMethod()));
auditLogDao.create(resourceType, parseId(resourceId), data, user,
policy.getAccountId(), policy.getAuthenticatedAsAccountId(), eventType, authType, runtime, null,
request.getClientIp());
}