@SuppressWarnings("unused")
private static final Logger log = Logger.getLogger(RunAsSecurityInterceptorFactory.class);
protected RunAsIdentity getRunAsIdentity(EJBContainer container)
{
RunAs runAs = (RunAs) container.getAnnotation(RunAs.class);
if (runAs == null)
return null;
RunAsPrincipal rap = (RunAsPrincipal) container.resolveAnnotation(RunAsPrincipal.class);
String runAsPrincipal = null;
if (rap != null)
runAsPrincipal = rap.value();
Set<String> extraRoles = new HashSet<String>();
JBossEnterpriseBeanMetaData jbEnterpriseBeanMetaData = container.getXml();
if(jbEnterpriseBeanMetaData != null)
{
SecurityIdentityMetaData securityIdentity = jbEnterpriseBeanMetaData.getSecurityIdentity();
if(securityIdentity.isUseCallerId())
return null; //Overriden in xml
String s = securityIdentity.getRunAsPrincipal();
if(s != null && s.length() != 0)
runAsPrincipal = s;
}
if(runAsPrincipal != null)
{
Map<String,Set<String>> principalVsRoleMap = jbEnterpriseBeanMetaData.getSecurityRolesPrincipalVersusRolesMap();
Set<String> roles = principalVsRoleMap.get(runAsPrincipal);
if(roles != null)
extraRoles.addAll(roles);
}
JBossAssemblyDescriptorMetaData ad = container.getAssemblyDescriptor();
if(ad != null && runAsPrincipal != null)
{
extraRoles.addAll(ad.getSecurityRoleNamesByPrincipal(runAsPrincipal));
}
return new RunAsIdentity(runAs.value(), runAsPrincipal, extraRoles);
}