1 package org
.argeo
.slc
.spring
.auth
;
3 import javax
.security
.auth
.Subject
;
4 import javax
.security
.auth
.login
.LoginContext
;
5 import javax
.security
.auth
.login
.LoginException
;
7 import org
.argeo
.api
.cms
.CmsAuth
;
8 import org
.argeo
.api
.cms
.CmsLog
;
9 import org
.argeo
.slc
.SlcException
;
11 /** Provides base method for executing code with system authorization. */
12 abstract class AbstractSystemExecution
{
13 private final static CmsLog log
= CmsLog
.getLog(AbstractSystemExecution
.class);
14 private final Subject subject
= new Subject();
16 /** Authenticate the calling thread */
17 protected void authenticateAsSystem() {
18 ClassLoader origClassLoader
= Thread
.currentThread().getContextClassLoader();
19 Thread
.currentThread().setContextClassLoader(getClass().getClassLoader());
21 LoginContext lc
= new LoginContext(CmsAuth
.LOGIN_CONTEXT_DATA_ADMIN
, subject
);
23 } catch (LoginException e
) {
24 throw new SlcException("Cannot login as system", e
);
26 Thread
.currentThread().setContextClassLoader(origClassLoader
);
28 if (log
.isTraceEnabled())
29 log
.trace("System authenticated");
32 protected void deauthenticateAsSystem() {
33 ClassLoader origClassLoader
= Thread
.currentThread().getContextClassLoader();
34 Thread
.currentThread().setContextClassLoader(getClass().getClassLoader());
36 LoginContext lc
= new LoginContext(CmsAuth
.LOGIN_CONTEXT_DATA_ADMIN
, subject
);
38 } catch (LoginException e
) {
39 throw new SlcException("Cannot logout as system", e
);
41 Thread
.currentThread().setContextClassLoader(origClassLoader
);
45 protected Subject
getSubject() {