1 package org
.argeo
.security
.ui
;
3 import java
.security
.AccessController
;
4 import java
.security
.PrivilegedAction
;
6 import javax
.security
.auth
.Subject
;
8 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
9 import org
.eclipse
.core
.runtime
.IStatus
;
10 import org
.eclipse
.core
.runtime
.jobs
.Job
;
11 import org
.springframework
.security
.Authentication
;
12 import org
.springframework
.security
.context
.SecurityContextHolder
;
15 * Propagate authentication to an eclipse job. Typically to execute a privileged
16 * action outside the UI thread
18 public abstract class PrivilegedJob
extends Job
{
20 private final Authentication authentication
;
21 private Subject subject
;
23 public PrivilegedJob(String jobName
) {
25 authentication
= SecurityContextHolder
.getContext().getAuthentication();
26 subject
= Subject
.getSubject(AccessController
.getContext());
30 protected IStatus
run(final IProgressMonitor progressMonitor
) {
31 PrivilegedAction
<IStatus
> privilegedAction
= new PrivilegedAction
<IStatus
>() {
32 public IStatus
run() {
33 SecurityContextHolder
.getContext().setAuthentication(
35 return doRun(progressMonitor
);
38 return Subject
.doAs(subject
, privilegedAction
);
42 * Implement here what should be executed with default context
45 protected abstract IStatus
doRun(IProgressMonitor progressMonitor
);