You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by jg...@apache.org on 2011/01/03 16:51:49 UTC

svn commit: r1054662 - in /openejb/trunk/openejb3/assembly/openejb-tomcat: openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/ openejb-tomcat-loader/src/main/java/org/apache/openejb/tomcat/loader/

Author: jgallimore
Date: Mon Jan  3 15:51:49 2011
New Revision: 1054662

URL: http://svn.apache.org/viewvc?rev=1054662&view=rev
Log:
OPENEJB-1403 fixed security itests - pRealm.hasRoles() has changed in Tomcat 7 so changed TomcatSecurityService to call it using reflection

Modified:
    openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatSecurityService.java
    openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-loader/src/main/java/org/apache/openejb/tomcat/loader/TomcatHelper.java

Modified: openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatSecurityService.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatSecurityService.java?rev=1054662&r1=1054661&r2=1054662&view=diff
==============================================================================
--- openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatSecurityService.java (original)
+++ openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatSecurityService.java Mon Jan  3 15:51:49 2011
@@ -84,7 +84,7 @@ public class TomcatSecurityService exten
             for (Principal principal : principals) {
                 if (principal instanceof TomcatUser) {
                     TomcatUser user = (TomcatUser) principal;
-                    if (user.getRealm().hasRole(user.getTomcatPrincipal(), logicalRole)) {
+                    if (TomcatHelper.hasRole(user.getRealm(), user.getTomcatPrincipal(), logicalRole)) {
                         roles.add(logicalRole);
                         break;
                     }

Modified: openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-loader/src/main/java/org/apache/openejb/tomcat/loader/TomcatHelper.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-loader/src/main/java/org/apache/openejb/tomcat/loader/TomcatHelper.java?rev=1054662&r1=1054661&r2=1054662&view=diff
==============================================================================
--- openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-loader/src/main/java/org/apache/openejb/tomcat/loader/TomcatHelper.java (original)
+++ openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-loader/src/main/java/org/apache/openejb/tomcat/loader/TomcatHelper.java Mon Jan  3 15:51:49 2011
@@ -19,10 +19,13 @@ package org.apache.openejb.tomcat.loader
 
 import java.lang.management.ManagementFactory;
 import java.lang.reflect.Method;
+import java.security.Principal;
 
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
+import org.apache.catalina.Realm;
+import org.apache.catalina.Wrapper;
 import org.apache.catalina.core.StandardContext;
 import org.apache.catalina.core.StandardServer;
 
@@ -88,4 +91,33 @@ public class TomcatHelper {
 		// return STOPPED by default
 		return 3;
 	}
+
+	/**
+	 * Helper method to call the correct org.apache.catalina.Realm.hasRole method based on the Tomcat version
+	 * @param realm
+	 * @param tomcatPrincipal
+	 * @param logicalRole
+	 * @return true the the principle has the specified role
+	 */
+	public static boolean hasRole(Realm realm, Principal tomcatPrincipal, String logicalRole) {
+		Method method = null;
+		try {
+
+			if (isTomcat7()) {
+				method = realm.getClass().getMethod("hasRole", new Class<?>[] { Wrapper.class, Principal.class, String.class });
+				return (Boolean) method.invoke(realm, new Object[] { null, tomcatPrincipal, logicalRole});
+			} else {
+				method = realm.getClass().getMethod("hasRole", new Class<?>[] { Principal.class, String.class });
+				return (Boolean) method.invoke(realm, new Object[] { tomcatPrincipal, logicalRole});
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
+		return false;
+	}
+
+	private static boolean isTomcat7() {
+		return System.getProperty("tomcat.version").startsWith("7.");
+	}
 }