From: <ga...@us...> - 2010-09-23 22:43:13
|
Revision: 4760 http://jaffa.svn.sourceforge.net/jaffa/?rev=4760&view=rev Author: gautamj Date: 2010-09-23 22:43:07 +0000 (Thu, 23 Sep 2010) Log Message: ----------- Manually merged the latest change from JAFFA_5_3_RELEASE: Modified JaffaMessageBean to not set the context, if invoked from a session having an authenticated user that matches the input userId. This scenario is possible when the JaffaMessageBean is invoked directly in POST_IMMEDIATE mode and was causing the context of the authenticated user to be lost. Modified Paths: -------------- trunk/JaffaSOA/source/java/org/jaffa/modules/messaging/services/JaffaMessageBean.java Modified: trunk/JaffaSOA/source/java/org/jaffa/modules/messaging/services/JaffaMessageBean.java =================================================================== --- trunk/JaffaSOA/source/java/org/jaffa/modules/messaging/services/JaffaMessageBean.java 2010-09-23 22:40:16 UTC (rev 4759) +++ trunk/JaffaSOA/source/java/org/jaffa/modules/messaging/services/JaffaMessageBean.java 2010-09-23 22:43:07 UTC (rev 4760) @@ -73,6 +73,7 @@ import org.jaffa.modules.user.services.UserContextWrapper; import org.jaffa.modules.user.services.UserContextWrapperFactory; import org.jaffa.presentation.portlet.session.UserSessionSetupException; +import org.jaffa.security.SecurityManager; import org.jaffa.session.ContextManagerFactory; import org.jaffa.util.EmailerBean; import org.jaffa.util.ExceptionHelper; @@ -184,13 +185,21 @@ * @throws ApplicationExceptions Indicates application error(s). */ private static void processPayload(Message aMessage, MessageInfo messageInfo, Object payload, String userId, String scheduledTaskId, String originalMessageId) throws FrameworkException, ApplicationExceptions { + // Maintain a reference to the currently logged in user. This may typically happen in POST_IMMEDIATE mode + String currentUserId = SecurityManager.getPrincipal() != null ? SecurityManager.getPrincipal().getName() : null; UserContextWrapper ucw = null; boolean createdLoggingContext = false; try { - // Sets the context based on the userId - if (log.isDebugEnabled()) - log.debug("Creating context for the user " + userId); - ucw = createUserContextWrapper(userId); + if (currentUserId != null && currentUserId.equals(userId)) { + // No need to set any context if the current userId matches the input userId + if (log.isDebugEnabled()) + log.debug("Context will not be created for the authenticated user " + userId); + } else { + // Sets the context based on the userId + if (log.isDebugEnabled()) + log.debug("Creating context for the user " + userId); + ucw = createUserContextWrapper(userId); + } // Sets Log4J's MDC to enable BusinessEventLogging LoggingService.setLoggingContext(payload, messageInfo, userId, scheduledTaskId, originalMessageId); @@ -220,8 +229,21 @@ LoggingService.unsetLoggingContext(payload, messageInfo); // Clear context for this user - if (ucw != null) + if (ucw != null) { ucw.unsetContext(); + + // Restore the context for the original user + if (currentUserId != null) { + try { + if (log.isDebugEnabled()) + log.debug("Restoring context for the user " + currentUserId); + createUserContextWrapper(currentUserId); + } catch (Exception e) { + if (log.isDebugEnabled()) + log.debug("Exception thrown while restoring context for the user " + currentUserId, e); + } + } + } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |