Author: rgielen Date: Thu Feb 1 03:28:57 2007 New Revision: 502196 URL: http://svn.apache.org/viewvc?view=rev&rev=502196 Log: WW-1696: Refactored PrincipalProxy to interface and provided a servlet and a portlet based implementation
Added: struts/struts2/trunk/core/src/main/java/org/apache/struts2/portlet/interceptor/PortletPrincipalProxy.java struts/struts2/trunk/core/src/main/java/org/apache/struts2/servlet/ struts/struts2/trunk/core/src/main/java/org/apache/struts2/servlet/interceptor/ struts/struts2/trunk/core/src/main/java/org/apache/struts2/servlet/interceptor/ServletPrincipalProxy.java Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/PrincipalProxy.java struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/ServletConfigInterceptor.java Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/PrincipalProxy.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/PrincipalProxy.java?view=diff&rev=502196&r1=502195&r2=502196 ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/PrincipalProxy.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/PrincipalProxy.java Thu Feb 1 03:28:57 2007 @@ -25,21 +25,10 @@ import javax.servlet.http.HttpServletRequest; /** - * Proxy class used together with PrincipalAware interface. It allows to get indirect access to - * HttpServletRequest Principal related methods. - * + * Proxy interface used together with PrincipalAware interface. It allows to get indirect access to + * HttpServletRequest or PortletRequest Principal related methods. */ -public class PrincipalProxy { - private HttpServletRequest request; - - /** - * Constructs a proxy - * - * @param request The underlying request - */ - public PrincipalProxy(HttpServletRequest request) { - this.request = request; - } +public interface PrincipalProxy { /** * True if the user is in the given role @@ -47,43 +36,35 @@ * @param role The role * @return True if the user is in that role */ - public boolean isUserInRole(String role) { - return request.isUserInRole(role); - } + boolean isUserInRole(String role); /** * Gets the user principal * * @return The principal */ - public Principal getUserPrincipal() { - return request.getUserPrincipal(); - } + Principal getUserPrincipal(); /** * Gets the user id * * @return The user id */ - public String getRemoteUser() { - return request.getRemoteUser(); - } + String getRemoteUser(); /** * Is the request using https? * * @return True if using https */ - public boolean isRequestSecure() { - return request.isSecure(); - } + boolean isRequestSecure(); /** - * Gets the request + * Gets the request. * * @return The request + * @deprecated To obtain the HttpServletRequest in your action, use + * [EMAIL PROTECTED] org.apache.struts2.servlet.ServletRequestAware}, since this method will be dropped in future. */ - public HttpServletRequest getRequest() { - return request; - } + HttpServletRequest getRequest(); } Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/ServletConfigInterceptor.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/ServletConfigInterceptor.java?view=diff&rev=502196&r1=502195&r2=502196 ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/ServletConfigInterceptor.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/ServletConfigInterceptor.java Thu Feb 1 03:28:57 2007 @@ -25,8 +25,12 @@ import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.portlet.PortletRequest; import org.apache.struts2.StrutsStatics; +import org.apache.struts2.servlet.interceptor.ServletPrincipalProxy; +import org.apache.struts2.portlet.PortletActionConstants; +import org.apache.struts2.portlet.interceptor.PortletPrincipalProxy; import org.apache.struts2.util.ServletContextAware; import com.opensymphony.xwork2.ActionContext; @@ -150,7 +154,14 @@ if (action instanceof PrincipalAware) { HttpServletRequest request = (HttpServletRequest) context.get(HTTP_REQUEST); - ((PrincipalAware) action).setPrincipalProxy(new PrincipalProxy(request)); + Object portletRequest = context.get(PortletActionConstants.REQUEST); + if (portletRequest != null) { + // We are in portlet environment, so principal information resides in PortletRequest + ((PrincipalAware) action).setPrincipalProxy(new PortletPrincipalProxy((PortletRequest) portletRequest)); + } else { + // We are in servtlet environment, so principal information resides in HttpServletRequest + ((PrincipalAware) action).setPrincipalProxy(new ServletPrincipalProxy(request)); + } } if (action instanceof ServletContextAware) { ServletContext servletContext = (ServletContext) context.get(SERVLET_CONTEXT); Added: struts/struts2/trunk/core/src/main/java/org/apache/struts2/portlet/interceptor/PortletPrincipalProxy.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/portlet/interceptor/PortletPrincipalProxy.java?view=auto&rev=502196 ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/portlet/interceptor/PortletPrincipalProxy.java (added) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/portlet/interceptor/PortletPrincipalProxy.java Thu Feb 1 03:28:57 2007 @@ -0,0 +1,73 @@ +package org.apache.struts2.portlet.interceptor; + +import org.apache.struts2.interceptor.PrincipalProxy; + +import javax.portlet.PortletRequest; +import javax.servlet.http.HttpServletRequest; +import java.security.Principal; + +/** + * PrincipalProxy implementation for using PortletRequest Principal related methods. + */ +public class PortletPrincipalProxy implements PrincipalProxy { + + private PortletRequest request; + + /** + * Constructs a proxy + * + * @param request The underlying request + */ + public PortletPrincipalProxy(PortletRequest request) { + this.request = request; + } + + /** + * True if the user is in the given role + * + * @param role The role + * @return True if the user is in that role + */ + public boolean isUserInRole(String role) { + return request.isUserInRole(role); + } + + /** + * Gets the user principal + * + * @return The principal + */ + public Principal getUserPrincipal() { + return request.getUserPrincipal(); + } + + /** + * Gets the user id + * + * @return The user id + */ + public String getRemoteUser() { + return request.getRemoteUser(); + } + + /** + * Is the request using https? + * + * @return True if using https + */ + public boolean isRequestSecure() { + return request.isSecure(); + } + + /** + * Gets the request. + * + * @return The request + * @throws UnsupportedOperationException not supported in this implementation. + * @deprecated To obtain the HttpServletRequest in your action, use + * [EMAIL PROTECTED] org.apache.struts2.servlet.ServletRequestAware}, since this method will be dropped in future. + */ + public HttpServletRequest getRequest() { + throw new UnsupportedOperationException("Usage of getRequest() method is deprecadet and not supported for this implementation"); + } +} Added: struts/struts2/trunk/core/src/main/java/org/apache/struts2/servlet/interceptor/ServletPrincipalProxy.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/servlet/interceptor/ServletPrincipalProxy.java?view=auto&rev=502196 ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/servlet/interceptor/ServletPrincipalProxy.java (added) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/servlet/interceptor/ServletPrincipalProxy.java Thu Feb 1 03:28:57 2007 @@ -0,0 +1,70 @@ +package org.apache.struts2.servlet.interceptor; + +import org.apache.struts2.interceptor.PrincipalProxy; + +import javax.servlet.http.HttpServletRequest; +import java.security.Principal; + +/** + * PrincipalProxy implementation for using HttpServletRequest Principal related methods. + */ +public class ServletPrincipalProxy implements PrincipalProxy { + private HttpServletRequest request; + + /** + * Constructs a proxy + * + * @param request The underlying request + */ + public ServletPrincipalProxy(HttpServletRequest request) { + this.request = request; + } + + /** + * True if the user is in the given role + * + * @param role The role + * @return True if the user is in that role + */ + public boolean isUserInRole(String role) { + return request.isUserInRole(role); + } + + /** + * Gets the user principal + * + * @return The principal + */ + public Principal getUserPrincipal() { + return request.getUserPrincipal(); + } + + /** + * Gets the user id + * + * @return The user id + */ + public String getRemoteUser() { + return request.getRemoteUser(); + } + + /** + * Is the request using https? + * + * @return True if using https + */ + public boolean isRequestSecure() { + return request.isSecure(); + } + + /** + * Gets the request. + * + * @return The request + * @deprecated To obtain the HttpServletRequest in your action, use + * [EMAIL PROTECTED] org.apache.struts2.servlet.ServletRequestAware}, since this method will be dropped in future. + */ + public HttpServletRequest getRequest() { + return request; + } +}