mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Merged HEAD-BUG-FIX (4.3/Cloud) to HEAD (4.3/Cloud)
63067: Merged V4.2-BUG-FIX (4.2.2) to HEAD-BUG-FIX (Cloud/4.3) 62765: MNT-10611: Merged DEV to V4.2-BUG-FIX (4.2.2) 62735: MNT-10611: Exception generated in .AccessAuditor. when audited String values bigger than 1024 characters (non-MySQL) - Trim String and MLtext audit values to not exceed system.maximumStringLength. Add unit test for case. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@64255 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -24,6 +24,7 @@ import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -36,6 +37,7 @@ import org.alfresco.repo.audit.model.AuditModelRegistryImpl;
|
||||
import org.alfresco.repo.audit.model.AuditApplication.DataExtractorDefinition;
|
||||
import org.alfresco.repo.domain.audit.AuditDAO;
|
||||
import org.alfresco.repo.domain.propval.PropertyValueDAO;
|
||||
import org.alfresco.repo.domain.schema.SchemaBootstrap;
|
||||
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
|
||||
import org.alfresco.repo.transaction.AlfrescoTransactionSupport;
|
||||
@@ -43,6 +45,7 @@ import org.alfresco.repo.transaction.AlfrescoTransactionSupport.TxnReadState;
|
||||
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
|
||||
import org.alfresco.service.cmr.audit.AuditQueryParameters;
|
||||
import org.alfresco.service.cmr.audit.AuditService.AuditQueryCallback;
|
||||
import org.alfresco.service.cmr.repository.MLText;
|
||||
import org.alfresco.service.transaction.TransactionService;
|
||||
import org.alfresco.util.PathMapper;
|
||||
import org.apache.commons.logging.Log;
|
||||
@@ -501,6 +504,27 @@ public class AuditComponentImpl implements AuditComponent
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
// trim string audited value
|
||||
for (Map.Entry<String, Serializable> entry : values.entrySet())
|
||||
{
|
||||
Serializable auditValue = entry.getValue();
|
||||
// Trim strings
|
||||
if (auditValue instanceof String)
|
||||
{
|
||||
entry.setValue(SchemaBootstrap.trimStringForTextFields((String) auditValue));
|
||||
}
|
||||
else if (auditValue instanceof MLText)
|
||||
{
|
||||
MLText mltext = (MLText) auditValue;
|
||||
Set<Locale> locales = mltext.getLocales();
|
||||
for (Locale locale : locales)
|
||||
{
|
||||
mltext.put(locale, SchemaBootstrap.trimStringForTextFields(mltext.getValue(locale)));
|
||||
}
|
||||
entry.setValue(mltext);
|
||||
}
|
||||
}
|
||||
|
||||
// Log inbound values
|
||||
if (loggerInbound.isDebugEnabled())
|
||||
{
|
||||
|
@@ -24,7 +24,9 @@ import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
|
||||
@@ -37,6 +39,7 @@ import org.alfresco.repo.domain.schema.SchemaBootstrap;
|
||||
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
|
||||
import org.alfresco.service.Auditable;
|
||||
import org.alfresco.service.cmr.repository.MLText;
|
||||
import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter;
|
||||
import org.alfresco.service.cmr.repository.datatype.TypeConversionException;
|
||||
import org.alfresco.service.transaction.TransactionService;
|
||||
@@ -373,6 +376,16 @@ public class AuditMethodInterceptor implements MethodInterceptor
|
||||
{
|
||||
audit = SchemaBootstrap.trimStringForTextFields((String) audit);
|
||||
}
|
||||
// trim MLText
|
||||
else if (audit instanceof MLText)
|
||||
{
|
||||
MLText mltext = (MLText) audit;
|
||||
Set<Locale> locales = mltext.getLocales();
|
||||
for (Locale locale : locales)
|
||||
{
|
||||
mltext.put(locale, SchemaBootstrap.trimStringForTextFields(mltext.getValue(locale)));
|
||||
}
|
||||
}
|
||||
}
|
||||
return audit;
|
||||
}
|
||||
|
@@ -25,6 +25,7 @@ import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
@@ -42,6 +43,7 @@ import org.alfresco.service.ServiceRegistry;
|
||||
import org.alfresco.service.cmr.audit.AuditQueryParameters;
|
||||
import org.alfresco.service.cmr.audit.AuditService;
|
||||
import org.alfresco.service.cmr.audit.AuditService.AuditQueryCallback;
|
||||
import org.alfresco.service.cmr.repository.MLText;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.repository.NodeService;
|
||||
import org.alfresco.service.cmr.repository.StoreRef;
|
||||
@@ -785,6 +787,43 @@ public class AuditComponentTest extends TestCase
|
||||
assertTrue("There should be exactly one audit entry for the API test", success);
|
||||
}
|
||||
|
||||
public void testAuditOverlimitProperties() throws Exception
|
||||
{
|
||||
final int OVERLIMIT_SIZE = 1500;
|
||||
final RetryingTransactionCallback<Void> testCallback = new RetryingTransactionCallback<Void>()
|
||||
{
|
||||
public Void execute() throws Throwable
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0; i < OVERLIMIT_SIZE; i++)
|
||||
{
|
||||
sb.append("a");
|
||||
}
|
||||
|
||||
MLText mlTextValue = new MLText();
|
||||
mlTextValue.put(Locale.ENGLISH, sb.toString());
|
||||
|
||||
Map<String, Serializable> values = new HashMap<String, Serializable>(13);
|
||||
values.put("/3.1/4.1", sb.toString());
|
||||
values.put("/3.1/4.2", mlTextValue);
|
||||
|
||||
auditComponent.recordAuditValues("/test/one.one/two.one", values);
|
||||
|
||||
return null;
|
||||
}
|
||||
};
|
||||
RunAsWork<Void> testRunAs = new RunAsWork<Void>()
|
||||
{
|
||||
public Void doWork() throws Exception
|
||||
{
|
||||
return transactionService.getRetryingTransactionHelper().doInTransaction(testCallback);
|
||||
}
|
||||
};
|
||||
AuthenticationUtil.runAs(testRunAs, "SomeOtherUser");
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Clearn the audit log as 'admin'
|
||||
*/
|
||||
|
Reference in New Issue
Block a user