diff --git a/source/java/org/alfresco/repo/action/AsynchronousActionExecutionQueueImpl.java b/source/java/org/alfresco/repo/action/AsynchronousActionExecutionQueueImpl.java index c9be7d72ec..94ed2dd784 100644 --- a/source/java/org/alfresco/repo/action/AsynchronousActionExecutionQueueImpl.java +++ b/source/java/org/alfresco/repo/action/AsynchronousActionExecutionQueueImpl.java @@ -35,6 +35,8 @@ import org.alfresco.repo.policy.ClassPolicyDelegate; import org.alfresco.repo.policy.PolicyComponent; import org.alfresco.repo.rule.RuleServiceImpl; import org.alfresco.repo.security.authentication.AuthenticationComponent; +import org.alfresco.repo.security.authentication.AuthenticationUtil; +import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; import org.alfresco.repo.transaction.AlfrescoTransactionSupport; import org.alfresco.repo.transaction.TransactionListenerAdapter; import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; @@ -350,40 +352,33 @@ public class AsynchronousActionExecutionQueueImpl implements AsynchronousActionE throw new ActionServiceException("Cannot execute action asynchronously since run as user is 'null'"); } - authenticationComponent.setCurrentUser(userName); - - try + // import the content + RunAsWork actionRunAs = new RunAsWork() { - RetryingTransactionCallback actionCallback = new RetryingTransactionCallback() + public Object doWork() throws Exception { - public Object execute() - { - // Bind the callback listener - CallbackTransactionListener tl = new CallbackTransactionListener(action, actionedUponNodeRef); - AlfrescoTransactionSupport.bindListener(tl); - - if (ActionExecutionWrapper.this.executedRules != null) - { - AlfrescoTransactionSupport.bindResource("RuleServiceImpl.ExecutedRules", ActionExecutionWrapper.this.executedRules); - } - - // Execute the action - actionService.executeActionImpl( - action, - actionedUponNodeRef, - checkConditions, - true, - actionChain); + RetryingTransactionCallback actionCallback = new RetryingTransactionCallback() + { + public Object execute() + { + if (ActionExecutionWrapper.this.executedRules != null) + { + AlfrescoTransactionSupport.bindResource("RuleServiceImpl.ExecutedRules", ActionExecutionWrapper.this.executedRules); + } + + ActionExecutionWrapper.this.actionService.executeActionImpl( + ActionExecutionWrapper.this.action, + ActionExecutionWrapper.this.actionedUponNodeRef, + ActionExecutionWrapper.this.checkConditions, true, + ActionExecutionWrapper.this.actionChain); - return null; - } - }; - transactionService.getRetryingTransactionHelper().doInTransaction(actionCallback); - } - finally - { - authenticationComponent.clearCurrentSecurityContext(); - } + return null; + } + }; + return transactionService.getRetryingTransactionHelper().doInTransaction(actionCallback); + } + }; + AuthenticationUtil.runAs(actionRunAs, userName); } catch (Throwable exception) { diff --git a/source/java/org/alfresco/repo/admin/patch/impl/EmailTemplatesContentPatch.java b/source/java/org/alfresco/repo/admin/patch/impl/EmailTemplatesContentPatch.java index 4ca7d405be..bfdf851572 100644 --- a/source/java/org/alfresco/repo/admin/patch/impl/EmailTemplatesContentPatch.java +++ b/source/java/org/alfresco/repo/admin/patch/impl/EmailTemplatesContentPatch.java @@ -32,6 +32,8 @@ import org.alfresco.i18n.I18NUtil; import org.alfresco.repo.admin.patch.AbstractPatch; import org.alfresco.repo.importer.ACPImportPackageHandler; import org.alfresco.repo.importer.ImporterBootstrap; +import org.alfresco.repo.security.authentication.AuthenticationUtil; +import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; import org.alfresco.service.cmr.admin.PatchException; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.StoreRef; @@ -171,16 +173,15 @@ public class EmailTemplatesContentPatch extends AbstractPatch setUp(); // import the content - try + RunAsWork importRunAs = new RunAsWork() { - authenticationComponent.setCurrentUser(authenticationComponent.getSystemUserName()); - - importContent(); - } - finally - { - authenticationComponent.clearCurrentSecurityContext(); - } + public Object doWork() throws Exception + { + importContent(); + return null; + } + }; + AuthenticationUtil.runAs(importRunAs, authenticationComponent.getSystemUserName()); // output a message to describe the result return I18NUtil.getMessage(MSG_CREATED); diff --git a/source/java/org/alfresco/repo/admin/patch/impl/ScriptsFolderPatch.java b/source/java/org/alfresco/repo/admin/patch/impl/ScriptsFolderPatch.java index 498a6f201a..63ba9829cc 100644 --- a/source/java/org/alfresco/repo/admin/patch/impl/ScriptsFolderPatch.java +++ b/source/java/org/alfresco/repo/admin/patch/impl/ScriptsFolderPatch.java @@ -37,6 +37,8 @@ import org.alfresco.model.ContentModel; import org.alfresco.repo.admin.patch.AbstractPatch; import org.alfresco.repo.importer.ACPImportPackageHandler; import org.alfresco.repo.importer.ImporterBootstrap; +import org.alfresco.repo.security.authentication.AuthenticationUtil; +import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; import org.alfresco.service.cmr.admin.PatchException; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; @@ -222,16 +224,15 @@ public class ScriptsFolderPatch extends AbstractPatch createFolder(); // import the content - try + RunAsWork importRunAs = new RunAsWork() { - authenticationComponent.setCurrentUser(authenticationComponent.getSystemUserName()); - - importContent(); - } - finally - { - authenticationComponent.clearCurrentSecurityContext(); - } + public Object doWork() throws Exception + { + importContent(); + return null; + } + }; + AuthenticationUtil.runAs(importRunAs, authenticationComponent.getSystemUserName()); msg = I18NUtil.getMessage(MSG_CREATED, scriptsFolderNodeRef); } diff --git a/source/java/org/alfresco/repo/security/authentication/AuthenticationUtil.java b/source/java/org/alfresco/repo/security/authentication/AuthenticationUtil.java index b70d9b6a30..f62be058c2 100644 --- a/source/java/org/alfresco/repo/security/authentication/AuthenticationUtil.java +++ b/source/java/org/alfresco/repo/security/authentication/AuthenticationUtil.java @@ -608,7 +608,7 @@ public abstract class AuthenticationUtil } else { - if(!AuthenticationUtil.getCurrentRealUserName().equals(realUser)) + if(!realUser.equals(AuthenticationUtil.getCurrentRealUserName())) { AuthenticationUtil.setCurrentRealUser(realUser); s_logger.warn("Resetting real user which has changed in RunAs block");