You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ad...@apache.org on 2009/08/29 01:18:41 UTC
svn commit: r809059 - in /ofbiz/branches/executioncontext20090812: ./
framework/api/src/org/ofbiz/api/authorization/
framework/api/src/org/ofbiz/api/context/
framework/context/src/org/ofbiz/context/
framework/minilang/src/org/ofbiz/minilang/method/call...
Author: adrianc
Date: Fri Aug 28 23:18:40 2009
New Revision: 809059
URL: http://svn.apache.org/viewvc?rev=809059&view=rev
Log:
Bug fixes, JavaDoc cleanups. It's almost there.
Right now I'm up against a brick wall. DispatchContext.java needs to be refactored to go any further - and that will take some time.
Modified:
ofbiz/branches/executioncontext20090812/BranchReadMe.txt
ofbiz/branches/executioncontext20090812/framework/api/src/org/ofbiz/api/authorization/AccessController.java
ofbiz/branches/executioncontext20090812/framework/api/src/org/ofbiz/api/authorization/AdminPermission.java
ofbiz/branches/executioncontext20090812/framework/api/src/org/ofbiz/api/context/ExecutionContextFactory.java
ofbiz/branches/executioncontext20090812/framework/api/src/org/ofbiz/api/context/ExecutionContextImpl.java
ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/AccessControllerImpl.java
ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/AuthorizationManagerImpl.java
ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/ExecutionContextImpl.java
ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/NullAccessController.java
ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/NullAuthorizationManager.java
ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/PathNode.java
ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/SecurityAwareListIterator.java
ofbiz/branches/executioncontext20090812/framework/minilang/src/org/ofbiz/minilang/method/callops/CallService.java
ofbiz/branches/executioncontext20090812/framework/security/data/SecurityData.xml
ofbiz/branches/executioncontext20090812/framework/service/src/org/ofbiz/service/ServiceDispatcher.java
ofbiz/branches/executioncontext20090812/framework/webapp/src/org/ofbiz/webapp/control/LoginWorker.java
ofbiz/branches/executioncontext20090812/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java
Modified: ofbiz/branches/executioncontext20090812/BranchReadMe.txt
URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20090812/BranchReadMe.txt?rev=809059&r1=809058&r2=809059&view=diff
==============================================================================
--- ofbiz/branches/executioncontext20090812/BranchReadMe.txt (original)
+++ ofbiz/branches/executioncontext20090812/BranchReadMe.txt Fri Aug 28 23:18:40 2009
@@ -26,6 +26,21 @@
declared in the api component, then have each component extend
the interfaces and add their methods. It's not pretty, but it works.
+This is where you can find the interfaces:
+
+org.ofbiz.api.authorization.AuthorizationManager
+ org.ofbiz.security.AuthorizationManager
+
+org.ofbiz.api.context.ExecutionContext
+ org.ofbiz.entity.ExecutionContext
+ org.ofbiz.security.ExecutionContext
+ org.ofbiz.service.ExecutionContext
+
+When the cross-dependency issues are solved, all of the extended
+interfaces will be consolidated into one.
+
+The interface implementations can be found in the context component.
+
The ultimate goal of ExecutionContext is to have all client code
get the contained objects from ExecutionContext only - instead of
getting them from the various classes now in use. This initial
@@ -58,5 +73,14 @@
2009-08-28: Permissions checking has been implemented. The code has
a few bugs, and there are places where the ExecutionContext isn't being
passed along, so OFBiz won't run with the AuthorizationManager enabled.
-Consequently, the AuthorizationManager is disabled by default. You can
+Consequently, the AuthorizationManager is disabled by default. It still
+"pretends" to check permissions, but it always grants access. You can
enable it with a property in api.properties.
+
+When a user first logs in, all of their permissions are gathered from the
+security entities and are used to assemble a tree-like Java structure.
+The structure is cached. When an artifact requests the user's permissions,
+an object (OFBizPermission) traverses the tree, accumulating permissions
+along the way. This is how permission inheritance is acheived. The permission
+object is then queried if the user has the requested permission and the
+result is returned to the artifact.
Modified: ofbiz/branches/executioncontext20090812/framework/api/src/org/ofbiz/api/authorization/AccessController.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20090812/framework/api/src/org/ofbiz/api/authorization/AccessController.java?rev=809059&r1=809058&r2=809059&view=diff
==============================================================================
--- ofbiz/branches/executioncontext20090812/framework/api/src/org/ofbiz/api/authorization/AccessController.java (original)
+++ ofbiz/branches/executioncontext20090812/framework/api/src/org/ofbiz/api/authorization/AccessController.java Fri Aug 28 23:18:40 2009
@@ -27,7 +27,7 @@
* separate the permissions-checking logic from the artifacts
* that use it.
*/
-public interface AccessController<E> {
+public interface AccessController<E> {
/** Returns silently if the user has been granted <code>permission</code>
* access for the current artifact, throws <code>AccessControlException</code>
Modified: ofbiz/branches/executioncontext20090812/framework/api/src/org/ofbiz/api/authorization/AdminPermission.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20090812/framework/api/src/org/ofbiz/api/authorization/AdminPermission.java?rev=809059&r1=809058&r2=809059&view=diff
==============================================================================
--- ofbiz/branches/executioncontext20090812/framework/api/src/org/ofbiz/api/authorization/AdminPermission.java (original)
+++ ofbiz/branches/executioncontext20090812/framework/api/src/org/ofbiz/api/authorization/AdminPermission.java Fri Aug 28 23:18:40 2009
@@ -21,7 +21,7 @@
import java.security.Permission;
/**
- * Admin permission class. Extends GenericPermission.
+ * Admin permission class. Extends BasicPermission.
*/
@SuppressWarnings("serial")
public class AdminPermission extends BasicPermission {
@@ -52,6 +52,10 @@
return this.permissionString.hashCode();
}
+ /** Returns <code>true</code> - the admin permission has
+ * no restrictions.
+ *
+ */
@Override
public boolean implies(Permission permission) {
return true;
Modified: ofbiz/branches/executioncontext20090812/framework/api/src/org/ofbiz/api/context/ExecutionContextFactory.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20090812/framework/api/src/org/ofbiz/api/context/ExecutionContextFactory.java?rev=809059&r1=809058&r2=809059&view=diff
==============================================================================
--- ofbiz/branches/executioncontext20090812/framework/api/src/org/ofbiz/api/context/ExecutionContextFactory.java (original)
+++ ofbiz/branches/executioncontext20090812/framework/api/src/org/ofbiz/api/context/ExecutionContextFactory.java Fri Aug 28 23:18:40 2009
@@ -18,6 +18,7 @@
*******************************************************************************/
package org.ofbiz.api.context;
+import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.UtilProperties;
/** ExecutionContext factory. */
Modified: ofbiz/branches/executioncontext20090812/framework/api/src/org/ofbiz/api/context/ExecutionContextImpl.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20090812/framework/api/src/org/ofbiz/api/context/ExecutionContextImpl.java?rev=809059&r1=809058&r2=809059&view=diff
==============================================================================
--- ofbiz/branches/executioncontext20090812/framework/api/src/org/ofbiz/api/context/ExecutionContextImpl.java (original)
+++ ofbiz/branches/executioncontext20090812/framework/api/src/org/ofbiz/api/context/ExecutionContextImpl.java Fri Aug 28 23:18:40 2009
@@ -25,7 +25,6 @@
import javolution.util.FastList;
import javolution.util.FastMap;
-import org.ofbiz.api.authorization.AccessController;
import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.UtilProperties;
Modified: ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/AccessControllerImpl.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/AccessControllerImpl.java?rev=809059&r1=809058&r2=809059&view=diff
==============================================================================
--- ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/AccessControllerImpl.java (original)
+++ ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/AccessControllerImpl.java Fri Aug 28 23:18:40 2009
@@ -35,6 +35,7 @@
import org.ofbiz.service.LocalDispatcher;
import org.ofbiz.service.ModelService;
+/** An implementation of the <code>AccessController</code> interface. */
public class AccessControllerImpl<E> implements AccessController<E> {
public static final String module = AccessControllerImpl.class.getName();
Modified: ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/AuthorizationManagerImpl.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/AuthorizationManagerImpl.java?rev=809059&r1=809058&r2=809059&view=diff
==============================================================================
--- ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/AuthorizationManagerImpl.java (original)
+++ ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/AuthorizationManagerImpl.java Fri Aug 28 23:18:40 2009
@@ -121,6 +121,12 @@
}
+ @Override
+ public void clearUserData(GenericValue userLogin) {
+ super.clearUserData(userLogin);
+ userPermCache.remove(userLogin.getString("userLogin"));
+ }
+
@SuppressWarnings("unchecked")
public AccessController<?> getAccessController(org.ofbiz.api.context.ExecutionContext executionContext) throws AccessControlException {
String userLoginId = ((ExecutionContext) executionContext).getUserLogin().getString("userLoginId");
Modified: ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/ExecutionContextImpl.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/ExecutionContextImpl.java?rev=809059&r1=809058&r2=809059&view=diff
==============================================================================
--- ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/ExecutionContextImpl.java (original)
+++ ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/ExecutionContextImpl.java Fri Aug 28 23:18:40 2009
@@ -34,7 +34,7 @@
import org.ofbiz.service.LocalDispatcher;
import org.ofbiz.service.ExecutionContext;
-/** ExecutionContext implementation. */
+/** An implementation of the <code>ExecutionContext</code> interface. */
public class ExecutionContextImpl extends org.ofbiz.api.context.ExecutionContextImpl implements ExecutionContext {
public static final String module = ExecutionContextImpl.class.getName();
@@ -45,7 +45,7 @@
public GenericDelegator getDelegator() {
if (this.delegator == null) {
- this.delegator = DelegatorFactory.getGenericDelegator("default");
+ this.delegator = DelegatorFactory.getGenericDelegator("default", this);
}
return this.delegator;
}
Modified: ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/NullAccessController.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/NullAccessController.java?rev=809059&r1=809058&r2=809059&view=diff
==============================================================================
--- ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/NullAccessController.java (original)
+++ ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/NullAccessController.java Fri Aug 28 23:18:40 2009
@@ -26,6 +26,9 @@
import org.ofbiz.entity.AccessController;
import org.ofbiz.entity.util.EntityListIterator;
+/** An implementation of the <code>AccessController</code> interface
+ * that allows unrestricted access.
+ */
public class NullAccessController<E> implements AccessController<E> {
public EntityListIterator applyFilters(EntityListIterator listIterator) {
Modified: ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/NullAuthorizationManager.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/NullAuthorizationManager.java?rev=809059&r1=809058&r2=809059&view=diff
==============================================================================
--- ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/NullAuthorizationManager.java (original)
+++ ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/NullAuthorizationManager.java Fri Aug 28 23:18:40 2009
@@ -46,7 +46,6 @@
* saved <code>AuthorizationManager</code> instance.</li>
* </ul></p>
*
- * @param <E>
*/
public class NullAuthorizationManager<E> implements AuthorizationManager {
Modified: ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/PathNode.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/PathNode.java?rev=809059&r1=809058&r2=809059&view=diff
==============================================================================
--- ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/PathNode.java (original)
+++ ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/PathNode.java Fri Aug 28 23:18:40 2009
@@ -22,6 +22,8 @@
import javolution.util.FastMap;
+/** Implements a node in a permissions tree.
+ */
public class PathNode {
protected Map<String, PathNode> childNodes = null;
Modified: ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/SecurityAwareListIterator.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/SecurityAwareListIterator.java?rev=809059&r1=809058&r2=809059&view=diff
==============================================================================
--- ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/SecurityAwareListIterator.java (original)
+++ ofbiz/branches/executioncontext20090812/framework/context/src/org/ofbiz/context/SecurityAwareListIterator.java Fri Aug 28 23:18:40 2009
@@ -18,7 +18,6 @@
*******************************************************************************/
package org.ofbiz.context;
-import java.util.List;
import java.util.ListIterator;
import java.util.Set;
@@ -27,7 +26,7 @@
/**
* SecurityAwareListIterator class. This class decorates a <code>
* ListIterator</code> instance and filters a list of
- * <code>GenericValue</code>s based on a set of permission services.
+ * <code>Object</code>s based on a set of permission services.
* <p>The permission service must implement <code>permissionInterface</code>
* and accept an optional <code>candidateObject</code> parameter (parameter
* type is <code>java.lang.Object</code>). The service should
Modified: ofbiz/branches/executioncontext20090812/framework/minilang/src/org/ofbiz/minilang/method/callops/CallService.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20090812/framework/minilang/src/org/ofbiz/minilang/method/callops/CallService.java?rev=809059&r1=809058&r2=809059&view=diff
==============================================================================
--- ofbiz/branches/executioncontext20090812/framework/minilang/src/org/ofbiz/minilang/method/callops/CallService.java (original)
+++ ofbiz/branches/executioncontext20090812/framework/minilang/src/org/ofbiz/minilang/method/callops/CallService.java Fri Aug 28 23:18:40 2009
@@ -25,6 +25,7 @@
import javolution.util.FastList;
import javolution.util.FastMap;
+import org.ofbiz.api.context.ExecutionContext;
import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.UtilMisc;
import org.ofbiz.base.util.UtilValidate;
@@ -228,6 +229,13 @@
if (locale != null) {
inMap.put("locale", locale);
}
+ ExecutionContext executionContext = (ExecutionContext) methodContext.getParameter("executionContext");
+ if (executionContext == null) {
+ executionContext = (ExecutionContext) methodContext.getEnv("executionContext");
+ }
+ if (executionContext != null) {
+ inMap.put("executionContext", executionContext);
+ }
try {
if (UtilValidate.isEmpty(this.requireNewTransactionStr) && this.transactionTimeout < 0) {
Modified: ofbiz/branches/executioncontext20090812/framework/security/data/SecurityData.xml
URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20090812/framework/security/data/SecurityData.xml?rev=809059&r1=809058&r2=809059&view=diff
==============================================================================
--- ofbiz/branches/executioncontext20090812/framework/security/data/SecurityData.xml (original)
+++ ofbiz/branches/executioncontext20090812/framework/security/data/SecurityData.xml Fri Aug 28 23:18:40 2009
@@ -72,9 +72,5 @@
<ArtifactPermission permissionValue="view=true" description="View access granted"/>
<ArtifactPermission permissionValue="view=false" description="View access denied"/>
<UserToArtifactPermRel userLoginId="system" artifactPath="ofbiz" permissionValue="admin=true"/>
- <ArtifactPath artifactPath="ofbiz/getUserPreferenceGroup" description="The getUserPreferenceGroup service"/>
- <ArtifactPath artifactPath="ofbiz/getVisualThemeResources" description="The getVisualThemeResources service"/>
- <UserToArtifactPermRel userLoginId="NOT_LOGGED_IN" artifactPath="ofbiz/getUserPreferenceGroup" permissionValue="access=true"/>
- <UserToArtifactPermRel userLoginId="NOT_LOGGED_IN" artifactPath="ofbiz/getVisualThemeResources" permissionValue="access=true"/>
</entity-engine-xml>
Modified: ofbiz/branches/executioncontext20090812/framework/service/src/org/ofbiz/service/ServiceDispatcher.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20090812/framework/service/src/org/ofbiz/service/ServiceDispatcher.java?rev=809059&r1=809058&r2=809059&view=diff
==============================================================================
--- ofbiz/branches/executioncontext20090812/framework/service/src/org/ofbiz/service/ServiceDispatcher.java (original)
+++ ofbiz/branches/executioncontext20090812/framework/service/src/org/ofbiz/service/ServiceDispatcher.java Fri Aug 28 23:18:40 2009
@@ -306,7 +306,6 @@
ExecutionContext executionContext = (ExecutionContext) context.get("executionContext");
if (executionContext == null) {
try {
- Debug.logInfo(new Exception(), modelService.name + ": No executionContext, creating new one", module);
executionContext = (ExecutionContext) ExecutionContextFactory.getInstance();
} catch (Exception e) {
throw new GenericServiceException(e);
Modified: ofbiz/branches/executioncontext20090812/framework/webapp/src/org/ofbiz/webapp/control/LoginWorker.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20090812/framework/webapp/src/org/ofbiz/webapp/control/LoginWorker.java?rev=809059&r1=809058&r2=809059&view=diff
==============================================================================
--- ofbiz/branches/executioncontext20090812/framework/webapp/src/org/ofbiz/webapp/control/LoginWorker.java (original)
+++ ofbiz/branches/executioncontext20090812/framework/webapp/src/org/ofbiz/webapp/control/LoginWorker.java Fri Aug 28 23:18:40 2009
@@ -61,6 +61,7 @@
import org.ofbiz.entity.transaction.TransactionUtil;
import org.ofbiz.security.Security;
import org.ofbiz.security.authz.Authorization;
+import org.ofbiz.service.ExecutionContext;
import org.ofbiz.service.GenericServiceException;
import org.ofbiz.service.LocalDispatcher;
import org.ofbiz.service.ModelService;
@@ -366,9 +367,12 @@
password = request.getParameter("newPassword");
}
}
+ ExecutionContext executionContext = (ExecutionContext) request.getAttribute("executionContext");
try {
- result = dispatcher.runSync("userLogin", UtilMisc.toMap("login.username", username, "login.password", password, "visitId", visitId, "locale", UtilHttp.getLocale(request)));
+ result = dispatcher.runSync("userLogin", UtilMisc.toMap("login.username", username,
+ "login.password", password, "visitId", visitId, "locale", UtilHttp.getLocale(request),
+ "executionContext", executionContext));
} catch (GenericServiceException e) {
Debug.logError(e, "Error calling userLogin service", module);
Map<String, String> messageMap = UtilMisc.toMap("errorMessage", e.getMessage());
@@ -379,6 +383,7 @@
if (ModelService.RESPOND_SUCCESS.equals(result.get(ModelService.RESPONSE_MESSAGE))) {
GenericValue userLogin = (GenericValue) result.get("userLogin");
+ executionContext.setUserLogin(userLogin);
Map<String, Object> userLoginSession = checkMap(result.get("userLoginSession"), String.class, Object.class);
if (userLogin != null && "Y".equals(userLogin.getString("requirePasswordChange"))) {
return "requirePasswordChange";
@@ -388,7 +393,9 @@
javaScriptEnabled = "Y";
}
try {
- result = dispatcher.runSync("setUserPreference", UtilMisc.toMap("userPrefTypeId", "javaScriptEnabled", "userPrefGroupTypeId", "GLOBAL_PREFERENCES", "userPrefValue", javaScriptEnabled, "userLogin", userLogin));
+ result = dispatcher.runSync("setUserPreference", UtilMisc.toMap("userPrefTypeId", "javaScriptEnabled",
+ "userPrefGroupTypeId", "GLOBAL_PREFERENCES", "userPrefValue", javaScriptEnabled,
+ "userLogin", userLogin, "executionContext", executionContext));
} catch (GenericServiceException e) {
Debug.logError(e, "Error setting user preference", module);
}
@@ -432,7 +439,10 @@
String javaScriptEnabled = null;
try {
LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
- Map<String, Object> result = dispatcher.runSync("getUserPreference", UtilMisc.toMap("userPrefTypeId", "javaScriptEnabled", "userPrefGroupTypeId", "GLOBAL_PREFERENCES", "userLogin", userLogin));
+ Map<String, Object> result = dispatcher.runSync("getUserPreference",
+ UtilMisc.toMap("userPrefTypeId", "javaScriptEnabled",
+ "userPrefGroupTypeId", "GLOBAL_PREFERENCES", "userLogin", userLogin,
+ "executionContext", request.getAttribute("executionContext")));
javaScriptEnabled = (String) result.get("userPrefValue");
} catch (GenericServiceException e) {
Debug.logError(e, "Error getting user preference", module);
Modified: ofbiz/branches/executioncontext20090812/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20090812/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java?rev=809059&r1=809058&r2=809059&view=diff
==============================================================================
--- ofbiz/branches/executioncontext20090812/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java (original)
+++ ofbiz/branches/executioncontext20090812/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java Fri Aug 28 23:18:40 2009
@@ -36,6 +36,7 @@
import javolution.util.FastMap;
+import org.ofbiz.api.context.GenericExecutionArtifact;
import org.ofbiz.api.context.GenericParametersArtifact;
import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.SSLUtil;
@@ -279,6 +280,7 @@
if (visit != null) {
for (ConfigXMLReader.Event event: controllerConfig.firstVisitEventList.values()) {
try {
+ executionContext.pushExecutionArtifact(new GenericExecutionArtifact(event.path, event.invoke));
String returnString = this.runEvent(request, response, event, null, "firstvisit");
if (returnString != null && !returnString.equalsIgnoreCase("success")) {
throw new EventHandlerException("First-Visit event did not return 'success'.");
@@ -287,6 +289,8 @@
}
} catch (EventHandlerException e) {
Debug.logError(e, module);
+ } finally {
+ executionContext.popExecutionArtifact();
}
}
}
@@ -295,6 +299,7 @@
// Invoke the pre-processor (but NOT in a chain)
for (ConfigXMLReader.Event event: controllerConfig.preprocessorEventList.values()) {
try {
+ executionContext.pushExecutionArtifact(new GenericExecutionArtifact(event.path, event.invoke));
String returnString = this.runEvent(request, response, event, null, "preprocessor");
if (returnString != null && !returnString.equalsIgnoreCase("success")) {
if (!returnString.contains(":_protect_:")) {
@@ -319,6 +324,8 @@
}
} catch (EventHandlerException e) {
Debug.logError(e, module);
+ } finally {
+ executionContext.popExecutionArtifact();
}
}
}
@@ -344,9 +351,12 @@
String checkLoginReturnString = null;
try {
+ executionContext.pushExecutionArtifact(new GenericExecutionArtifact(checkLoginEvent.path, checkLoginEvent.invoke));
checkLoginReturnString = this.runEvent(request, response, checkLoginEvent, null, "security-auth");
} catch (EventHandlerException e) {
throw new RequestHandlerException(e.getMessage(), e);
+ } finally {
+ executionContext.popExecutionArtifact();
}
if (!"success".equalsIgnoreCase(checkLoginReturnString)) {
// previous URL already saved by event, so just do as the return says...
@@ -377,6 +387,7 @@
long eventStartTime = System.currentTimeMillis();
// run the request event
+ executionContext.pushExecutionArtifact(new GenericExecutionArtifact(requestMap.event.path, requestMap.event.invoke));
eventReturn = this.runEvent(request, response, requestMap.event, requestMap, "request");
// save the server hit for the request event
@@ -398,6 +409,8 @@
} else {
throw new RequestHandlerException("Error calling event and no error response was specified", e);
}
+ } finally {
+ executionContext.popExecutionArtifact();
}
}
}
@@ -525,12 +538,15 @@
// first invoke the post-processor events.
for (ConfigXMLReader.Event event: controllerConfig.postprocessorEventList.values()) {
try {
+ executionContext.pushExecutionArtifact(new GenericExecutionArtifact(event.path, event.invoke));
String returnString = this.runEvent(request, response, event, requestMap, "postprocessor");
if (returnString != null && !returnString.equalsIgnoreCase("success")) {
throw new EventHandlerException("Post-Processor event did not return 'success'.");
}
} catch (EventHandlerException e) {
Debug.logError(e, module);
+ } finally {
+ executionContext.popExecutionArtifact();
}
}
@@ -1074,27 +1090,35 @@
}
public void runAfterLoginEvents(HttpServletRequest request, HttpServletResponse response) {
+ ExecutionContext executionContext = (ExecutionContext) request.getAttribute("executionContext");
for (ConfigXMLReader.Event event: getControllerConfig().afterLoginEventList.values()) {
try {
+ executionContext.pushExecutionArtifact(new GenericExecutionArtifact(event.path, event.invoke));
String returnString = this.runEvent(request, response, event, null, "after-login");
if (returnString != null && !returnString.equalsIgnoreCase("success")) {
throw new EventHandlerException("Pre-Processor event did not return 'success'.");
}
} catch (EventHandlerException e) {
Debug.logError(e, module);
+ } finally {
+ executionContext.popExecutionArtifact();
}
}
}
public void runBeforeLogoutEvents(HttpServletRequest request, HttpServletResponse response) {
+ ExecutionContext executionContext = (ExecutionContext) request.getAttribute("executionContext");
for (ConfigXMLReader.Event event: getControllerConfig().beforeLogoutEventList.values()) {
try {
+ executionContext.pushExecutionArtifact(new GenericExecutionArtifact(event.path, event.invoke));
String returnString = this.runEvent(request, response, event, null, "before-logout");
if (returnString != null && !returnString.equalsIgnoreCase("success")) {
throw new EventHandlerException("Pre-Processor event did not return 'success'.");
}
} catch (EventHandlerException e) {
Debug.logError(e, module);
+ } finally {
+ executionContext.popExecutionArtifact();
}
}
}