Index: components/profiler/src/java/org/apache/jetspeed/profiler/rules/impl/UserAttributeResolver.java =================================================================== --- components/profiler/src/java/org/apache/jetspeed/profiler/rules/impl/UserAttributeResolver.java (Revision 386322) +++ components/profiler/src/java/org/apache/jetspeed/profiler/rules/impl/UserAttributeResolver.java (Arbeitskopie) @@ -15,16 +15,21 @@ */ package org.apache.jetspeed.profiler.rules.impl; -import java.util.Map; +import java.security.Principal; +import java.util.prefs.Preferences; -import javax.portlet.PortletRequest; - +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.apache.jetspeed.profiler.rules.RuleCriterion; import org.apache.jetspeed.profiler.rules.RuleCriterionResolver; import org.apache.jetspeed.request.RequestContext; +import org.apache.jetspeed.security.SecurityException; +import org.apache.jetspeed.security.User; +import org.apache.jetspeed.security.UserManager; +import org.apache.jetspeed.services.JetspeedPortletServices; /** - * Looks in the Portlet API User Attributes for given named attribute + * Looks in Jetspeed user preferences for given named attribute. * * @author David Sean Taylor * @version $Id$ @@ -35,23 +40,37 @@ implements RuleCriterionResolver { + + private static Log log = LogFactory.getLog(UserAttributeResolver.class); + /* (non-Javadoc) * @see org.apache.jetspeed.profiler.rules.RuleCriterionResolver#resolve(org.apache.jetspeed.request.RequestContext, org.apache.jetspeed.profiler.rules.RuleCriterion) */ public String resolve(RequestContext context, RuleCriterion criterion) { - Object object = context.getRequest().getAttribute(PortletRequest.USER_INFO); - if (object != null && object instanceof Map) - { - Map map = (Map)object; - String attribute = (String)map.get(criterion.getName()); - if (attribute != null) - { - return attribute; - } + Principal principal = context.getRequest().getUserPrincipal(); + if (principal == null) { + log.error("Invalid (null) principal in request pipeline"); + return null; + } + UserManager userManager = (UserManager) JetspeedPortletServices.getSingleton().getService("UserManager"); + User user; + try { + user = userManager.getUser(principal.getName()); + } catch (SecurityException e) { + log.error("unable to find user: " + principal.getName(), e); + return null; + } + log.debug("looking up attributes for user: " + principal.getName()); + Preferences userAttributes = user.getUserAttributes(); + String attributeValue = userAttributes.get(criterion.getName(), null); + if (attributeValue == null){ + log.debug("user attribute '" + criterion.getName() + "' not found, returning default: " + criterion.getValue()); return criterion.getValue(); + } else { + log.debug("found user attribute '" + criterion.getName() + "' with value: " + attributeValue); + return attributeValue; } - return null; } /* (non-Javadoc)