diff --git a/source/java/org/alfresco/web/scripts/portlet/JSR168PortletAuthenticator.java b/source/java/org/alfresco/web/scripts/portlet/JSR168PortletAuthenticator.java index 50dba4f432..ecbcd6db34 100644 --- a/source/java/org/alfresco/web/scripts/portlet/JSR168PortletAuthenticator.java +++ b/source/java/org/alfresco/web/scripts/portlet/JSR168PortletAuthenticator.java @@ -63,7 +63,13 @@ public class JSR168PortletAuthenticator implements WebScriptPortletAuthenticator */ public boolean authenticate(RequiredAuthentication required, boolean isGuest, RenderRequest req, RenderResponse res) { - String portalUser = req.getRemoteUser(); + // first look for the username key in the session - we add this by hand for some portals + // when the WebScriptPortletRequest is created + String portalUser = (String)req.getPortletSession().getAttribute(WebScriptPortletRequest.ALFPORTLETUSERNAME); + if (portalUser == null) + { + portalUser = req.getRemoteUser(); + } if (logger.isDebugEnabled()) { diff --git a/source/java/org/alfresco/web/scripts/portlet/WebClientPortletAuthenticator.java b/source/java/org/alfresco/web/scripts/portlet/WebClientPortletAuthenticator.java index 697fded6c7..8f1117384e 100644 --- a/source/java/org/alfresco/web/scripts/portlet/WebClientPortletAuthenticator.java +++ b/source/java/org/alfresco/web/scripts/portlet/WebClientPortletAuthenticator.java @@ -76,10 +76,17 @@ public class WebClientPortletAuthenticator implements WebScriptPortletAuthentica public boolean authenticate(RequiredAuthentication required, boolean isGuest, RenderRequest req, RenderResponse res) { PortletSession session = req.getPortletSession(); - String portalUser = req.getRemoteUser(); + + // first look for the username key in the session - we add this by hand for some portals + // when the WebScriptPortletRequest is created + String portalUser = (String)req.getPortletSession().getAttribute(WebScriptPortletRequest.ALFPORTLETUSERNAME); + if (portalUser == null) + { + portalUser = req.getRemoteUser(); + } if (logger.isDebugEnabled()) - { + { logger.debug("JSR-168 Remote user: " + portalUser); } diff --git a/source/java/org/alfresco/web/scripts/portlet/WebScriptPortletRequest.java b/source/java/org/alfresco/web/scripts/portlet/WebScriptPortletRequest.java index b096f688fd..cf41d94fd5 100644 --- a/source/java/org/alfresco/web/scripts/portlet/WebScriptPortletRequest.java +++ b/source/java/org/alfresco/web/scripts/portlet/WebScriptPortletRequest.java @@ -24,6 +24,8 @@ */ package org.alfresco.web.scripts.portlet; +import java.util.Map; + import javax.portlet.PortletRequest; import org.alfresco.web.scripts.WebScriptMatch; @@ -37,6 +39,8 @@ import org.alfresco.web.scripts.WebScriptURLRequest; */ public class WebScriptPortletRequest extends WebScriptURLRequest { + public static final String ALFPORTLETUSERNAME = "alfportletusername"; + /** Portlet Request */ private PortletRequest req; @@ -64,6 +68,23 @@ public class WebScriptPortletRequest extends WebScriptURLRequest { super(scriptUrlParts, serviceMatch); this.req = req; + // look for the user info map in the portlet request - populated by the portlet container + Map userInfo = (Map)req.getAttribute(PortletRequest.USER_INFO); + if (userInfo != null) + { + // look for the special Liferay email (username) key + String liferayUsername = (String)userInfo.get("user.home-info.online.email"); + if (liferayUsername != null) + { + // strip suffix from email address - we only need username part + if (liferayUsername.indexOf('@') != -1) + { + liferayUsername = liferayUsername.substring(0, liferayUsername.indexOf('@')); + } + // save in session for use by alfresco portlet authenticator + this.req.getPortletSession().setAttribute(ALFPORTLETUSERNAME, liferayUsername); + } + } } /** @@ -92,5 +113,4 @@ public class WebScriptPortletRequest extends WebScriptURLRequest // NOTE: rely on default agent mappings return null; } - }