1 package org
.argeo
.slc
.spring
;
3 import javax
.security
.auth
.Subject
;
4 import javax
.security
.auth
.login
.LoginContext
;
5 import javax
.security
.auth
.login
.LoginException
;
7 import org
.apache
.commons
.logging
.Log
;
8 import org
.apache
.commons
.logging
.LogFactory
;
9 import org
.argeo
.api
.NodeConstants
;
10 import org
.argeo
.slc
.SlcException
;
12 /** Provides base method for executing code with system authorization. */
13 abstract class AbstractSystemExecution
{
14 private final static Log log
= LogFactory
.getLog(AbstractSystemExecution
.class);
15 private final Subject subject
= new Subject();
17 /** Authenticate the calling thread */
18 protected void authenticateAsSystem() {
19 ClassLoader origClassLoader
= Thread
.currentThread().getContextClassLoader();
20 Thread
.currentThread().setContextClassLoader(getClass().getClassLoader());
22 LoginContext lc
= new LoginContext(NodeConstants
.LOGIN_CONTEXT_DATA_ADMIN
, subject
);
24 } catch (LoginException e
) {
25 throw new SlcException("Cannot login as system", e
);
27 Thread
.currentThread().setContextClassLoader(origClassLoader
);
29 if (log
.isTraceEnabled())
30 log
.trace("System authenticated");
33 protected void deauthenticateAsSystem() {
34 ClassLoader origClassLoader
= Thread
.currentThread().getContextClassLoader();
35 Thread
.currentThread().setContextClassLoader(getClass().getClassLoader());
37 LoginContext lc
= new LoginContext(NodeConstants
.LOGIN_CONTEXT_DATA_ADMIN
, subject
);
39 } catch (LoginException e
) {
40 throw new SlcException("Cannot logout as system", e
);
42 Thread
.currentThread().setContextClassLoader(origClassLoader
);
46 protected Subject
getSubject() {