X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.security.ui%2Fsrc%2Forg%2Fargeo%2Fsecurity%2Fui%2FPrivilegedJob.java;h=3a9ade427bf4794151526baba5680b91788918d3;hb=ba8f8a6fb8ad9649dd03b2ac4670d194f0e1be79;hp=f66ef2b6011f7ad70b25f2030bbcaf39d07ae462;hpb=4b56d461613392a3808d886d5373cf46b65a040e;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.security.ui/src/org/argeo/security/ui/PrivilegedJob.java b/org.argeo.security.ui/src/org/argeo/security/ui/PrivilegedJob.java index f66ef2b60..3a9ade427 100644 --- a/org.argeo.security.ui/src/org/argeo/security/ui/PrivilegedJob.java +++ b/org.argeo.security.ui/src/org/argeo/security/ui/PrivilegedJob.java @@ -1,5 +1,6 @@ package org.argeo.security.ui; +import java.security.AccessControlContext; import java.security.AccessController; import java.security.PrivilegedAction; @@ -8,30 +9,32 @@ import javax.security.auth.Subject; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.jobs.Job; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; /** * Propagate authentication to an eclipse job. Typically to execute a privileged * action outside the UI thread */ public abstract class PrivilegedJob extends Job { - - private final Authentication authentication; - private Subject subject; + private final Subject subject; public PrivilegedJob(String jobName) { + this(jobName, AccessController.getContext()); + } + + public PrivilegedJob(String jobName, + AccessControlContext accessControlContext) { super(jobName); - authentication = SecurityContextHolder.getContext().getAuthentication(); - subject = Subject.getSubject(AccessController.getContext()); + subject = Subject.getSubject(accessControlContext); + + // Must be called *before* the job is scheduled, + // it is required for the progress window to appear + setUser(true); } @Override protected IStatus run(final IProgressMonitor progressMonitor) { PrivilegedAction privilegedAction = new PrivilegedAction() { public IStatus run() { - SecurityContextHolder.getContext().setAuthentication( - authentication); return doRun(progressMonitor); } };