--- /dev/null
+package org.argeo.security.core;
+
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.config.BeanPostProcessor;
+
+/**
+ * Executes with a system authentication the initialization methods of the
+ * application context where it has been defined.
+ */
+public class SystemExecutionBeanPostProcessor extends
+ AbstractSystemExecution implements BeanPostProcessor {
+
+ public Object postProcessBeforeInitialization(Object bean, String beanName)
+ throws BeansException {
+ authenticateAsSystem();
+ return bean;
+ }
+
+ public Object postProcessAfterInitialization(Object bean, String beanName)
+ throws BeansException {
+ // NOTE: in case there was an exception in on the initialization method
+ // we expect the underlying thread to die and thus the system
+ // authentication to be lost. We have currently no way to catch the
+ // exception and perform the deauthentication by ourselves.
+ deauthenticateAsSystem();
+ return bean;
+ }
+
+}