[jboss-cvs] JBossAS SVN: r114782 - branches/JBPAPP_5/server/src/main/org/jboss/ejb.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Mar 25 05:29:52 EDT 2014
Author: wolfc
Date: 2014-03-25 05:29:52 -0400 (Tue, 25 Mar 2014)
New Revision: 114782
Modified:
branches/JBPAPP_5/server/src/main/org/jboss/ejb/EJBPermissionMapping.java
Log:
JBPAPP-11037: fix EJB permission mapping as per EJB 3.0 17.3
Modified: branches/JBPAPP_5/server/src/main/org/jboss/ejb/EJBPermissionMapping.java
===================================================================
--- branches/JBPAPP_5/server/src/main/org/jboss/ejb/EJBPermissionMapping.java 2014-03-25 09:28:32 UTC (rev 114781)
+++ branches/JBPAPP_5/server/src/main/org/jboss/ejb/EJBPermissionMapping.java 2014-03-25 09:29:52 UTC (rev 114782)
@@ -21,14 +21,18 @@
*/
package org.jboss.ejb;
+import java.lang.reflect.Method;
+import java.security.Permissions;
import java.util.Iterator;
import java.util.Set;
+import javax.ejb.EJBContext;
import javax.security.jacc.EJBMethodPermission;
import javax.security.jacc.EJBRoleRefPermission;
import javax.security.jacc.PolicyConfiguration;
import javax.security.jacc.PolicyContextException;
+import org.jboss.logging.Logger;
import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
import org.jboss.metadata.ejb.spec.ExcludeListMetaData;
@@ -49,10 +53,24 @@
*/
public class EJBPermissionMapping
{
+ private static final Logger LOGGER = Logger.getLogger(EJBPermissionMapping.class);
+ private static boolean anyInterfaceImplied(final Permissions specifiedPermissions, final String ejbName, final Method method)
+ {
+ for (MethodInterfaceType methodInterfaceType : MethodInterfaceType.values())
+ {
+ EJBMethodPermission p = new EJBMethodPermission(ejbName, methodInterfaceType.name(), method);
+ if (specifiedPermissions.implies(p))
+ return true;
+ }
+ return false;
+ }
+
public static void createPermissions(JBossEnterpriseBeanMetaData bean, PolicyConfiguration pc)
throws PolicyContextException
{
+ final Permissions specifiedPermissions = new Permissions();
+
// Process the method-permission MethodMetaData
MethodPermissionsMetaData perms = bean.getMethodPermissions();
if (perms != null)
@@ -74,6 +92,7 @@
MethodInterfaceType miType = mmd.getMethodIntf();
String iface = miType != null ? miType.name() : null;
EJBMethodPermission p = new EJBMethodPermission(mmd.getEjbName(), methodName, iface, params);
+ specifiedPermissions.add(p);
if (perm.getUnchecked() != null)
{
pc.addToUncheckedPolicy(p);
@@ -111,6 +130,7 @@
MethodInterfaceType miType = mmd.getMethodIntf();
String iface = miType != null ? miType.name() : null;
EJBMethodPermission p = new EJBMethodPermission(mmd.getEjbName(), methodName, iface, params);
+ specifiedPermissions.add(p);
pc.addToExcludedPolicy(p);
}
}
@@ -121,7 +141,11 @@
for (org.jboss.metadata.javaee.spec.SecurityRoleRefMetaData ref : refs)
{
EJBRoleRefPermission p = new EJBRoleRefPermission(bean.getEjbName(), ref.getRoleName());
- pc.addToRole(ref.getRoleLink(), p);
+ // EJB 3.0 17.3.3 if not used, then equal to the role-name
+ String roleLink = ref.getRoleLink();
+ if (roleLink == null)
+ roleLink = ref.getRoleName();
+ pc.addToRole(roleLink, p);
}
/* Special handling of stateful session bean getEJBObject due how the
@@ -137,5 +161,30 @@
pc.addToUncheckedPolicy(p);
}
}
+
+ // EJB 3.0 17.3.2.3
+ try
+ {
+ Class beanClass = Class.forName(bean.getEjbClass(), false, Thread.currentThread().getContextClassLoader());
+ for (Method method : beanClass.getMethods())
+ {
+ Class declaringClass = method.getDeclaringClass();
+ if (declaringClass == Object.class || EJBContext.class.isAssignableFrom(declaringClass))
+ continue;
+ if (anyInterfaceImplied(specifiedPermissions, bean.getEjbName(), method))
+ continue;
+ // now without an interface
+ EJBMethodPermission p = new EJBMethodPermission(bean.getEjbName(), null, method);
+ if (specifiedPermissions.implies(p))
+ continue;
+ // if nothing has been said yet about this kind of permission
+ pc.addToUncheckedPolicy(p);
+ LOGGER.debugf("No permission specified for %s, adding it to unchecked", p);
+ }
+ }
+ catch (ClassNotFoundException e)
+ {
+ throw new RuntimeException(e);
+ }
}
}
More information about the jboss-cvs-commits
mailing list