]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.security.ui/src/org/argeo/security/ui/PrivilegedJob.java
Continue framework clean up.
[lgpl/argeo-commons.git] / org.argeo.security.ui / src / org / argeo / security / ui / PrivilegedJob.java
index f66ef2b6011f7ad70b25f2030bbcaf39d07ae462..3a9ade427bf4794151526baba5680b91788918d3 100644 (file)
@@ -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<IStatus> privilegedAction = new PrivilegedAction<IStatus>() {
                        public IStatus run() {
-                               SecurityContextHolder.getContext().setAuthentication(
-                                               authentication);
                                return doRun(progressMonitor);
                        }
                };