You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2007/03/23 06:15:58 UTC
svn commit: r521589 - in /incubator/openejb/trunk/openejb3:
container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/
container/openejb-core/src/main/java/org/apache/openejb/config/
container/openejb-core/src/main/java/org/apache/opene...
Author: dblevins
Date: Thu Mar 22 22:15:56 2007
New Revision: 521589
URL: http://svn.apache.org/viewvc?view=rev&rev=521589
Log:
OPENEJB-225: javax.annotation.security.DeclareRoles
OPENEJB-226: javax.annotation.security.DenyAll
OPENEJB-227: javax.annotation.security.PermitAll
OPENEJB-228: javax.annotation.security.RolesAllowed
OPENEJB-229: javax.annotation.security.RunAs
Added:
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JaccPermissionsBuilder.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/
- copied from r520838, incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/GroupPrincipal.java
- copied, changed from r521122, incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/GroupPrincipal.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/PropertiesLoginModule.java
- copied, changed from r521122, incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/PropertiesLoginModule.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/SecurityServiceImpl.java
- copied, changed from r521122, incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/SecurityServiceImpl.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/UserPrincipal.java
- copied, changed from r521122, incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/UserPrincipal.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/UsernamePasswordCallbackHandler.java
- copied, changed from r521122, incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/UsernamePasswordCallbackHandler.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/security/
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/security/PropertiesLoginModuleTest.java
- copied, changed from r520838, incubator/openejb/trunk/openejb3/server/openejb-security/src/test/java/org/apache/openejb/server/security/PropertiesLoginModuleTest.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/security/SecurityTest.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/resources/groups.properties
- copied, changed from r520838, incubator/openejb/trunk/openejb3/server/openejb-security/src/test/resources/groups.properties
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/resources/login.config
- copied, changed from r520838, incubator/openejb/trunk/openejb3/server/openejb-security/src/test/resources/login.config
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/resources/users.properties
- copied, changed from r520838, incubator/openejb/trunk/openejb3/server/openejb-security/src/test/resources/users.properties
Removed:
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/JaccPermissionsBuilder.java
incubator/openejb/trunk/openejb3/server/openejb-security/
Modified:
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml
incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EjbJar.java
incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ExcludeList.java
incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/Method.java
incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/MethodPermission.java
incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/RunAs.java
incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/SecurityIdentity.java
incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/SecurityRoleRef.java
incubator/openejb/trunk/openejb3/server/pom.xml
Added: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JaccPermissionsBuilder.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JaccPermissionsBuilder.java?view=auto&rev=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JaccPermissionsBuilder.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JaccPermissionsBuilder.java Thu Mar 22 22:15:56 2007
@@ -0,0 +1,274 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.assembler.classic;
+
+import org.apache.openejb.InterfaceType;
+import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.DeploymentInfo;
+import org.apache.openejb.core.CoreDeploymentInfo;
+import org.apache.openejb.assembler.classic.ModulePermissions;
+import org.apache.openejb.assembler.classic.EjbJarInfo;
+import org.apache.openejb.assembler.classic.EnterpriseBeanInfo;
+import org.apache.openejb.assembler.classic.MethodPermissionInfo;
+import org.apache.openejb.assembler.classic.MethodInfo;
+import org.apache.openejb.assembler.classic.SecurityRoleReferenceInfo;
+
+import javax.security.auth.Subject;
+import javax.security.jacc.EJBMethodPermission;
+import javax.security.jacc.EJBRoleRefPermission;
+import java.security.Permission;
+import java.security.PermissionCollection;
+import java.security.Permissions;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class JaccPermissionsBuilder {
+
+
+ public ModulePermissions build(EjbJarInfo ejbJar, HashMap<String, DeploymentInfo> deployments) throws OpenEJBException {
+
+ ModulePermissions componentPermissions = new ModulePermissions(new Permissions(), new Permissions(), new HashMap());
+
+ for (EnterpriseBeanInfo enterpriseBean : ejbJar.enterpriseBeans) {
+ CoreDeploymentInfo deployment = (CoreDeploymentInfo) deployments.get(enterpriseBean.ejbDeploymentId);
+
+ Permissions permissions = new Permissions();
+
+ String ejbName = enterpriseBean.ejbName;
+ for (InterfaceType type : InterfaceType.values()) {
+ addToPermissions(permissions, ejbName, type.getName(), deployment.getInterface(type));
+ }
+
+ String defaultRole = null;
+ addComponentPermissions(ejbJar, enterpriseBean, defaultRole, permissions, componentPermissions);
+
+ // RunAs subject
+ String runAsName = enterpriseBean.runAs;
+ if (runAsName != null) {
+ Subject runAsSubject = null; // TODO: Turn name into subject
+ if (runAsSubject == null) {
+ throw new OpenEJBException("No role designate found for run-as name: " + runAsName);
+ }
+ deployment.setRunAsSubject(runAsSubject);
+ }
+ }
+ return componentPermissions;
+ }
+
+ /**
+ * Fill the container moduleBuilder with the security information that it needs
+ * to create the proper interceptors. A <code>SecurityConfiguration</code>
+ * is also filled with permissions that need to be used to fill the JACC
+ * policy configuration.
+ *
+ * @param defaultRole default role for otherwise unassigned permissions
+ * @param notAssigned the set of all possible permissions. These will be
+ * culled so that all that are left are those that have
+ * not been assigned roles.
+ * @param modulePermissions the holder for the ejb's permissions
+ * @throws org.apache.openejb.OpenEJBException
+ * if any constraints are violated
+ */
+ private void addComponentPermissions(EjbJarInfo ejbJar, EnterpriseBeanInfo beanInfo, String defaultRole, Permissions notAssigned, ModulePermissions modulePermissions) throws OpenEJBException {
+
+ PermissionCollection uncheckedPermissions = modulePermissions.getUncheckedPermissions();
+ PermissionCollection excludedPermissions = modulePermissions.getExcludedPermissions();
+ Map rolePermissions = modulePermissions.getRolePermissions();
+
+ String ejbName = beanInfo.ejbName;
+
+ //this can occur in an ear when one ejb module has security and one doesn't. In this case we still need
+ //to make the non-secure one completely unchecked.
+ /**
+ * JACC v1.0 section 3.1.5.1
+ */
+ for (MethodPermissionInfo methodPermission : ejbJar.methodPermissions) {
+ List<String> roleNames = methodPermission.roleNames;
+ boolean unchecked = methodPermission.unchecked;
+
+ for (MethodInfo method : methodPermission.methods) {
+
+ if (!ejbName.equals(method.ejbName)) {
+ continue;
+ }
+
+ // method name
+ String methodName = method.methodName;
+ if ("*".equals(methodName)) {
+ // jacc uses null instead of *
+ methodName = null;
+ }
+
+ // method interface
+ String methodIntf = method.methodIntf;
+
+ // method parameters
+ String[] methodParams;
+ if (method.methodParams != null) {
+ List<String> paramList = method.methodParams;
+ methodParams = paramList.toArray(new String[paramList.size()]);
+ } else {
+ methodParams = null;
+ }
+
+ // create the permission object
+ EJBMethodPermission permission = new EJBMethodPermission(ejbName, methodName, methodIntf, methodParams);
+ notAssigned = cullPermissions(notAssigned, permission);
+
+ // if this is unchecked, mark it as unchecked; otherwise assign the roles
+ if (unchecked) {
+ uncheckedPermissions.add(permission);
+ } else {
+ for (String roleName : roleNames) {
+ Permissions permissions = (Permissions) rolePermissions.get(roleName);
+ if (permissions == null) {
+ permissions = new Permissions();
+ rolePermissions.put(roleName, permissions);
+ }
+ permissions.add(permission);
+ }
+ }
+ }
+
+ }
+
+ /**
+ * JACC v1.0 section 3.1.5.2
+ */
+ for (MethodInfo method : ejbJar.excludeList) {
+ if (!ejbName.equals(method.ejbName)) {
+ continue;
+ }
+
+ // method name
+ String methodName = method.methodName;
+ // method interface
+ String methodIntf = method.methodIntf;
+
+ // method parameters
+ String[] methodParams;
+ if (method.methodParams != null) {
+ List<String> paramList = method.methodParams;
+ methodParams = paramList.toArray(new String[paramList.size()]);
+ } else {
+ methodParams = null;
+ }
+
+ // create the permission object
+ EJBMethodPermission permission = new EJBMethodPermission(ejbName, methodName, methodIntf, methodParams);
+
+ excludedPermissions.add(permission);
+ notAssigned = cullPermissions(notAssigned, permission);
+ }
+
+ /**
+ * JACC v1.0 section 3.1.5.3
+ */
+ for (SecurityRoleReferenceInfo securityRoleRef : beanInfo.securityRoleReferences) {
+
+ if (securityRoleRef.roleLink == null) {
+ throw new OpenEJBException("Missing role-link");
+ }
+
+ String roleLink = securityRoleRef.roleLink;
+
+ PermissionCollection roleLinks = (PermissionCollection) rolePermissions.get(roleLink);
+ if (roleLinks == null) {
+ roleLinks = new Permissions();
+ rolePermissions.put(roleLink, roleLinks);
+
+ }
+ roleLinks.add(new EJBRoleRefPermission(ejbName, securityRoleRef.roleName));
+ }
+
+ /**
+ * EJB v2.1 section 21.3.2
+ * <p/>
+ * It is possible that some methods are not assigned to any security
+ * roles nor contained in the <code>exclude-list</code> element. In
+ * this case, it is the responsibility of the Deployer to assign method
+ * permissions for all of the unspecified methods, either by assigning
+ * them to security roles, or by marking them as <code>unchecked</code>.
+ */
+ PermissionCollection permissions;
+ if (defaultRole == null) {
+ permissions = uncheckedPermissions;
+ } else {
+ permissions = (PermissionCollection) rolePermissions.get(defaultRole);
+ if (permissions == null) {
+ permissions = new Permissions();
+ rolePermissions.put(defaultRole, permissions);
+ }
+ }
+
+ Enumeration e = notAssigned.elements();
+ while (e.hasMoreElements()) {
+ Permission p = (Permission) e.nextElement();
+ permissions.add(p);
+ }
+
+ }
+
+ /**
+ * Generate all the possible permissions for a bean's interface.
+ * <p/>
+ * Method permissions are defined in the deployment descriptor as a binary
+ * relation from the set of security roles to the set of methods of the
+ * home, component, and/or web service endpoint interfaces of session and
+ * entity beans, including all their superinterfaces (including the methods
+ * of the <code>EJBHome</code> and <code>EJBObject</code> interfaces and/or
+ * <code>EJBLocalHome</code> and <code>EJBLocalObject</code> interfaces).
+ *
+ * @param permissions the permission set to be extended
+ * @param ejbName the name of the EJB
+ * @param methodInterface the EJB method interface
+ * @throws org.apache.openejb.OpenEJBException
+ * in case a class could not be found
+ */
+ public void addToPermissions(Permissions permissions, String ejbName, String methodInterface, Class clazz) throws OpenEJBException {
+ if (clazz == null) return;
+ for (java.lang.reflect.Method method : clazz.getMethods()) {
+ permissions.add(new EJBMethodPermission(ejbName, methodInterface, method));
+ }
+ }
+
+ /**
+ * Removes permissions from <code>toBeChecked</code> that are implied by
+ * <code>permission</code>.
+ *
+ * @param toBeChecked the permissions that are to be checked and possibly culled
+ * @param permission the permission that is to be used for culling
+ * @return the culled set of permissions that are not implied by <code>permission</code>
+ */
+ private Permissions cullPermissions(Permissions toBeChecked, Permission permission) {
+ Permissions result = new Permissions();
+
+ for (Enumeration e = toBeChecked.elements(); e.hasMoreElements();) {
+ Permission test = (Permission) e.nextElement();
+ if (!permission.implies(test)) {
+ result.add(test);
+ }
+ }
+
+ return result;
+ }
+}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java?view=diff&rev=521589&r1=521588&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java Thu Mar 22 22:15:56 2007
@@ -17,8 +17,49 @@
package org.apache.openejb.config;
import org.apache.openejb.OpenEJBException;
-import org.apache.openejb.jee.*;
+import org.apache.openejb.jee.ActivationConfig;
+import org.apache.openejb.jee.ActivationConfigProperty;
+import org.apache.openejb.jee.ApplicationClient;
+import org.apache.openejb.jee.AroundInvoke;
+import org.apache.openejb.jee.AssemblyDescriptor;
+import org.apache.openejb.jee.ContainerTransaction;
+import org.apache.openejb.jee.EjbJar;
+import org.apache.openejb.jee.EjbLocalRef;
+import org.apache.openejb.jee.EjbRef;
+import org.apache.openejb.jee.EnterpriseBean;
+import org.apache.openejb.jee.EnvEntry;
+import org.apache.openejb.jee.ExcludeList;
+import org.apache.openejb.jee.InitMethod;
+import org.apache.openejb.jee.InjectionTarget;
+import org.apache.openejb.jee.Interceptor;
+import org.apache.openejb.jee.InterceptorBinding;
+import org.apache.openejb.jee.JndiConsumer;
+import org.apache.openejb.jee.JndiReference;
+import org.apache.openejb.jee.Lifecycle;
+import org.apache.openejb.jee.LifecycleCallback;
+import org.apache.openejb.jee.MessageDrivenBean;
+import org.apache.openejb.jee.MethodParams;
+import org.apache.openejb.jee.MethodPermission;
+import org.apache.openejb.jee.MethodTransaction;
+import org.apache.openejb.jee.NamedMethod;
+import org.apache.openejb.jee.PersistenceContextRef;
+import org.apache.openejb.jee.PersistenceContextType;
+import org.apache.openejb.jee.PersistenceUnitRef;
+import org.apache.openejb.jee.Property;
+import org.apache.openejb.jee.RemoteBean;
+import org.apache.openejb.jee.RemoveMethod;
+import org.apache.openejb.jee.ResAuth;
+import org.apache.openejb.jee.ResSharingScope;
+import org.apache.openejb.jee.ResourceEnvRef;
+import org.apache.openejb.jee.ResourceRef;
+import org.apache.openejb.jee.SecurityIdentity;
+import org.apache.openejb.jee.ServiceRef;
import org.apache.openejb.jee.SessionBean;
+import org.apache.openejb.jee.StatefulBean;
+import org.apache.openejb.jee.StatelessBean;
+import org.apache.openejb.jee.TransAttribute;
+import org.apache.openejb.jee.TransactionType;
+import org.apache.openejb.jee.SecurityRoleRef;
import org.apache.openejb.util.Logger;
import org.apache.xbean.finder.ClassFinder;
@@ -26,10 +67,16 @@
import javax.annotation.PreDestroy;
import javax.annotation.Resource;
import javax.annotation.Resources;
+import javax.annotation.security.DenyAll;
+import javax.annotation.security.PermitAll;
+import javax.annotation.security.RolesAllowed;
+import javax.annotation.security.RunAs;
+import javax.annotation.security.DeclareRoles;
import javax.ejb.EJB;
import javax.ejb.EJBHome;
import javax.ejb.EJBLocalHome;
import javax.ejb.EJBs;
+import javax.ejb.Init;
import javax.ejb.Local;
import javax.ejb.LocalHome;
import javax.ejb.MessageDriven;
@@ -37,23 +84,21 @@
import javax.ejb.PrePassivate;
import javax.ejb.Remote;
import javax.ejb.RemoteHome;
+import javax.ejb.Remove;
import javax.ejb.Stateful;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
-import javax.ejb.Init;
-import javax.ejb.Remove;
-import javax.ejb.EJBContext;
+import javax.interceptor.ExcludeClassInterceptors;
+import javax.interceptor.ExcludeDefaultInterceptors;
+import javax.interceptor.Interceptors;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceContexts;
import javax.persistence.PersistenceProperty;
import javax.persistence.PersistenceUnit;
import javax.persistence.PersistenceUnits;
-import javax.interceptor.Interceptors;
-import javax.interceptor.ExcludeDefaultInterceptors;
-import javax.interceptor.ExcludeClassInterceptors;
import javax.xml.ws.WebServiceRef;
import javax.xml.ws.WebServiceRefs;
import java.io.File;
@@ -103,6 +148,7 @@
}
// @SuppressWarnings("unchecked")
+
public EjbModule deploy(EjbModule ejbModule) throws OpenEJBException {
ClassFinder finder;
if (ejbModule.getJarURI() != null) {
@@ -231,7 +277,8 @@
ClassFinder inheritedClassFinder = createInheritedClassFinder(clazz);
- inheritedClassFinder.getClass();
+ processCallbacks(bean, inheritedClassFinder);
+
if (bean.getTransactionType() == null) {
TransactionManagement tx = clazz.getAnnotation(TransactionManagement.class);
TransactionManagementType transactionType = TransactionManagementType.CONTAINER;
@@ -303,13 +350,61 @@
}
}
- processCallbacks(bean, inheritedClassFinder);
+ RolesAllowed rolesAllowed = clazz.getAnnotation(RolesAllowed.class);
+ if (rolesAllowed != null) {
+ MethodPermission methodPermission = new MethodPermission();
+ methodPermission.getRoleName().addAll(Arrays.asList(rolesAllowed.value()));
+ methodPermission.getMethod().add(new org.apache.openejb.jee.Method(ejbName, "*"));
+ assemblyDescriptor.getMethodPermission().add(methodPermission);
+ }
+
+ for (Method method : classFinder.findAnnotatedMethods(RolesAllowed.class)) {
+ MethodPermission methodPermission = new MethodPermission();
+ methodPermission.getRoleName().addAll(Arrays.asList(rolesAllowed.value()));
+ methodPermission.getMethod().add(new org.apache.openejb.jee.Method(ejbName, method));
+ assemblyDescriptor.getMethodPermission().add(methodPermission);
+ }
+
+ PermitAll permitAll = clazz.getAnnotation(PermitAll.class);
+ if (permitAll != null) {
+ MethodPermission methodPermission = new MethodPermission();
+ methodPermission.setUnchecked(true);
+ methodPermission.getMethod().add(new org.apache.openejb.jee.Method(ejbName, "*"));
+ assemblyDescriptor.getMethodPermission().add(methodPermission);
+ }
+
+ for (Method method : classFinder.findAnnotatedMethods(PermitAll.class)) {
+ MethodPermission methodPermission = new MethodPermission();
+ methodPermission.setUnchecked(true);
+ methodPermission.getMethod().add(new org.apache.openejb.jee.Method(ejbName, method));
+ assemblyDescriptor.getMethodPermission().add(methodPermission);
+ }
+
+ for (Method method : classFinder.findAnnotatedMethods(DenyAll.class)) {
+ ExcludeList excludeList = assemblyDescriptor.getExcludeList();
+ excludeList.addMethod(new org.apache.openejb.jee.Method(ejbName, method));
+ }
+
+ RunAs runAs = clazz.getAnnotation(RunAs.class);
+ if (runAs != null && bean.getSecurityIdentity() == null) {
+ SecurityIdentity securityIdentity = new SecurityIdentity();
+ securityIdentity.setRunAs(runAs.value());
+ }
+
+ DeclareRoles declareRoles = clazz.getAnnotation(DeclareRoles.class);
+ if (declareRoles != null && bean instanceof RemoteBean){
+ RemoteBean remoteBean = (RemoteBean) bean;
+ List<SecurityRoleRef> securityRoleRefs = remoteBean.getSecurityRoleRef();
+ for (String role : declareRoles.value()) {
+ securityRoleRefs.add(new SecurityRoleRef(role));
+ }
+ }
Interceptors interceptors = clazz.getAnnotation(Interceptors.class);
- if (interceptors != null){
+ if (interceptors != null) {
EjbJar ejbJar = ejbModule.getEjbJar();
for (Class interceptor : interceptors.value()) {
- if (ejbJar.getInterceptor(interceptor.getName()) == null){
+ if (ejbJar.getInterceptor(interceptor.getName()) == null) {
ejbJar.addInterceptor(new Interceptor(interceptor.getName()));
}
}
@@ -324,10 +419,10 @@
for (Method method : classFinder.findAnnotatedMethods(Interceptors.class)) {
interceptors = method.getAnnotation(Interceptors.class);
- if (interceptors != null){
+ if (interceptors != null) {
EjbJar ejbJar = ejbModule.getEjbJar();
for (Class interceptor : interceptors.value()) {
- if (ejbJar.getInterceptor(interceptor.getName()) == null){
+ if (ejbJar.getInterceptor(interceptor.getName()) == null) {
ejbJar.addInterceptor(new Interceptor(interceptor.getName()));
}
}
@@ -344,7 +439,7 @@
}
ExcludeDefaultInterceptors excludeDefaultInterceptors = clazz.getAnnotation(ExcludeDefaultInterceptors.class);
- if (excludeDefaultInterceptors != null){
+ if (excludeDefaultInterceptors != null) {
InterceptorBinding binding = assemblyDescriptor.addInterceptorBinding(new InterceptorBinding(bean));
binding.setExcludeDefaultInterceptors(true);
}
@@ -356,7 +451,7 @@
}
ExcludeClassInterceptors excludeClassInterceptors = clazz.getAnnotation(ExcludeClassInterceptors.class);
- if (excludeClassInterceptors != null){
+ if (excludeClassInterceptors != null) {
InterceptorBinding binding = assemblyDescriptor.addInterceptorBinding(new InterceptorBinding(bean));
binding.setExcludeClassInterceptors(true);
}
@@ -366,7 +461,7 @@
binding.setExcludeClassInterceptors(true);
binding.setMethod(new NamedMethod(method));
}
-
+
if (bean instanceof RemoteBean) {
RemoteBean remoteBean = (RemoteBean) bean;
@@ -377,7 +472,7 @@
try {
Method create = null;
for (Method method : homeClass.getMethods()) {
- if (method.getName().startsWith("create")){
+ if (method.getName().startsWith("create")) {
create = method;
break;
}
@@ -400,7 +495,7 @@
try {
Method create = null;
for (Method method : homeClass.getMethods()) {
- if (method.getName().startsWith("create")){
+ if (method.getName().startsWith("create")) {
create = method;
break;
}
@@ -578,7 +673,7 @@
List<Class> parents = new ArrayList();
parents.add(clazz);
Class parent = clazz;
- while ((parent = parent.getSuperclass()) != null){
+ while ((parent = parent.getSuperclass()) != null) {
parents.add(parent);
}
@@ -629,7 +724,7 @@
InitMethod initMethod = new InitMethod(method);
Init init = method.getAnnotation(Init.class);
- if (init.value() != null && !init.value().equals("")){
+ if (init.value() != null && !init.value().equals("")) {
initMethod.setCreateMethod(init.value());
}
@@ -763,11 +858,11 @@
List<PersistenceContext> persistenceContextList = new ArrayList<PersistenceContext>();
PersistenceContexts persistenceContexts = clazz.getAnnotation(PersistenceContexts.class);
- if(persistenceContexts != null){
+ if (persistenceContexts != null) {
persistenceContextList.addAll(Arrays.asList(persistenceContexts.value()));
}
PersistenceContext persistenceContext = clazz.getAnnotation(PersistenceContext.class);
- if (persistenceContext != null){
+ if (persistenceContext != null) {
persistenceContextList.add(persistenceContext);
}
for (PersistenceContext pCtx : persistenceContextList) {
@@ -841,63 +936,63 @@
break;
}
}
-
-
- if(reference == null) {
+
+
+ if (reference == null) {
String type = null;
- if(resource.type() != java.lang.Object.class) {
+ if (resource.type() != java.lang.Object.class) {
type = resource.type().getName();
} else {
- type = member.getType().getName();
+ type = member.getType().getName();
}
/* TODO message-destination-refs have not been considered . Currently the types that are
* not in the types in knownConnectionFactoryTypes array are considered resource-env-refs
* This approach needs to be changed as it is just a hack to get the functionality working.
*/
-
-
- String[] knownConnectionFactoryTypes = {"javax.sql.DataSource","javax.jms.ConnectionFactory","javax.jms.QueueConnectionFactory","javax.jms.TopicConnectionFactory","javax.mail.Session","java.net.URL"};
- String[] knownEnvironmentEntries = {"java.lang.String", "java.lang.Character", "java.lang.Integer", "java.lang.Boolean", "java.lang.Double",
- "java.lang.Byte", "java.lang.Short", "java.lang.Long", "java.lang.Float","int","char","boolean","double","byte","short","long","float"};
- if (type.equals("javax.ejb.SessionContext")){
+
+
+ String[] knownConnectionFactoryTypes = {"javax.sql.DataSource", "javax.jms.ConnectionFactory", "javax.jms.QueueConnectionFactory", "javax.jms.TopicConnectionFactory", "javax.mail.Session", "java.net.URL"};
+ String[] knownEnvironmentEntries = {"java.lang.String", "java.lang.Character", "java.lang.Integer", "java.lang.Boolean", "java.lang.Double",
+ "java.lang.Byte", "java.lang.Short", "java.lang.Long", "java.lang.Float", "int", "char", "boolean", "double", "byte", "short", "long", "float"};
+ if (type.equals("javax.ejb.SessionContext")) {
ResourceEnvRef ref = new ResourceEnvRef();
ref.setResourceEnvRefName(refName);
ref.setResourceEnvRefType(type);
consumer.getResourceEnvRef().add(ref);
reference = ref;
- } else if (contains(knownConnectionFactoryTypes,type)) {
+ } else if (contains(knownConnectionFactoryTypes, type)) {
ResourceRef resourceRef = null;
List<ResourceRef> resourceRefs = consumer.getResourceRef();
for (ResourceRef resRef : resourceRefs) {
- if( resRef.getName().equals(refName)) {
+ if (resRef.getName().equals(refName)) {
resourceRef = resRef;
break;
- }
+ }
}
-
+
if (resourceRef == null) {
resourceRef = new ResourceRef();
resourceRef.setName(refName);
resourceRefs.add(resourceRef);
}
-
+
if (resourceRef.getResAuth() == null) {
- if (resource.authenticationType() == Resource.AuthenticationType.APPLICATION){
+ if (resource.authenticationType() == Resource.AuthenticationType.APPLICATION) {
resourceRef.setResAuth(ResAuth.APPLICATION);
} else {
resourceRef.setResAuth(ResAuth.CONTAINER);
}
}
-
+
if (resourceRef.getResType() == null || ("").equals(resourceRef.getResType())) {
if (resource.type() != java.lang.Object.class) {
resourceRef.setResType(resource.type().getName());
} else {
resourceRef.setResType(member.getType().getName());
- }
+ }
}
-
- if (resourceRef.getResSharingScope() == null){
+
+ if (resourceRef.getResSharingScope() == null) {
if (resource.shareable()) {
resourceRef.setResSharingScope(ResSharingScope.SHAREABLE);
} else {
@@ -905,31 +1000,32 @@
}
}
reference = resourceRef;
- } else if (!contains(knownEnvironmentEntries,type)){
-
+ } else if (!contains(knownEnvironmentEntries, type)) {
+
List<ResourceEnvRef> resourceEnvRefs = consumer.getResourceEnvRef();
ResourceEnvRef resourceEnvRef = null;
for (ResourceEnvRef resEnvRef : resourceEnvRefs) {
- if(resEnvRef.getName().equals(refName)) {
+ if (resEnvRef.getName().equals(refName)) {
resourceEnvRef = resEnvRef;
break;
- }
+ }
}
if (resourceEnvRef == null) {
resourceEnvRef = new ResourceEnvRef();
resourceEnvRef.setName(refName);
resourceEnvRefs.add(resourceEnvRef);
}
- if (resourceEnvRef.getResourceEnvRefType() == null || ("").equals(resourceEnvRef.getResourceEnvRefType())) {
+ if (resourceEnvRef.getResourceEnvRefType() == null || ("").equals(resourceEnvRef.getResourceEnvRefType()))
+ {
if (resource.type() != java.lang.Object.class) {
resourceEnvRef.setResourceEnvRefType(resource.type().getName());
} else {
resourceEnvRef.setResourceEnvRefType(member.getType().getName());
- }
- }
+ }
+ }
reference = resourceEnvRef;
}
- }
+ }
if (reference == null) {
return;
}
@@ -999,6 +1095,7 @@
/**
* Refer 16.11.2.1 Overriding Rules of EJB Core Spec for overriding rules
+ *
* @param consumer
* @param persistenceContext
* @param member
@@ -1006,17 +1103,17 @@
*/
private void buildPersistenceContext(JndiConsumer consumer, PersistenceContext persistenceContext, Member member) throws OpenEJBException {
String refName = persistenceContext.name();
-
- if(refName.equals("")) {
+
+ if (refName.equals("")) {
refName = (member == null) ? null : member.getDeclaringClass().getName() + "/" + member.getName();
}
-
- if(refName == null) {
+
+ if (refName == null) {
throw new OpenEJBException("The name attribute is not specified for the class level annotation @PersistenceContext with unitName="
- + persistenceContext.unitName() + ". It is mandatory for all class level PersistenceContext annotations.");
+ + persistenceContext.unitName() + ". It is mandatory for all class level PersistenceContext annotations.");
}
PersistenceContextRef persistenceContextRef = null;
-
+
List<PersistenceContextRef> persistenceContextRefs = consumer.getPersistenceContextRef();
for (PersistenceContextRef pcRef : persistenceContextRefs) {
if (pcRef.getPersistenceContextRefName().equals(refName)) {
@@ -1024,62 +1121,64 @@
break;
}
}
-
+
if (persistenceContextRef == null) {
persistenceContextRef = new PersistenceContextRef();
persistenceContextRef.setPersistenceUnitName(persistenceContext.unitName());
persistenceContextRef.setPersistenceContextRefName(refName);
- if(persistenceContext.type() == javax.persistence.PersistenceContextType.EXTENDED) {
+ if (persistenceContext.type() == javax.persistence.PersistenceContextType.EXTENDED) {
persistenceContextRef.setPersistenceContextType(PersistenceContextType.EXTENDED);
} else {
persistenceContextRef.setPersistenceContextType(PersistenceContextType.TRANSACTION);
- }
+ }
persistenceContextRefs.add(persistenceContextRef);
} else {
- if (persistenceContextRef.getPersistenceUnitName() == null || ("").equals(persistenceContextRef.getPersistenceUnitName())) {
+ if (persistenceContextRef.getPersistenceUnitName() == null || ("").equals(persistenceContextRef.getPersistenceUnitName()))
+ {
persistenceContextRef.setPersistenceUnitName(persistenceContext.unitName());
}
- if (persistenceContextRef.getPersistenceContextType() == null || ("").equals(persistenceContextRef.getPersistenceContextType())) {
- if(persistenceContext.type() == javax.persistence.PersistenceContextType.EXTENDED) {
+ if (persistenceContextRef.getPersistenceContextType() == null || ("").equals(persistenceContextRef.getPersistenceContextType()))
+ {
+ if (persistenceContext.type() == javax.persistence.PersistenceContextType.EXTENDED) {
persistenceContextRef.setPersistenceContextType(PersistenceContextType.EXTENDED);
} else {
persistenceContextRef.setPersistenceContextType(PersistenceContextType.TRANSACTION);
- }
- }
+ }
+ }
}
-
+
List<Property> persistenceProperties = persistenceContextRef.getPersistenceProperty();
if (persistenceProperties == null) {
persistenceProperties = new ArrayList<Property>();
persistenceContextRef.setPersistenceProperty(persistenceProperties);
}
-
+
Property property = null;
- for(PersistenceProperty persistenceProperty : persistenceContext.properties()) {
+ for (PersistenceProperty persistenceProperty : persistenceContext.properties()) {
boolean flag = true;
- for(Property prpty : persistenceProperties) {
- if(prpty.getName().equals(persistenceProperty.name())) {
+ for (Property prpty : persistenceProperties) {
+ if (prpty.getName().equals(persistenceProperty.name())) {
flag = false;
break;
- }
+ }
}
- if(flag) {
+ if (flag) {
property = new Property();
property.setName(persistenceProperty.name());
property.setValue(persistenceProperty.value());
persistenceProperties.add(property);
}
}
-
+
if (member != null) {
// Set the member name where this will be injected
InjectionTarget target = new InjectionTarget();
target.setInjectionTargetClass(member.getDeclaringClass().getName());
target.setInjectionTargetName(member.getName());
persistenceContextRef.getInjectionTarget().add(target);
- }
+ }
}
-
+
private void buildEjbRef(JndiConsumer consumer, EJB ejb, Member member) {
EjbRef ejbRef = new EjbRef();
@@ -1169,7 +1268,7 @@
return new ArrayList<Class<?>>(classes);
}
- private boolean contains(Object[] types,Object type){
+ private boolean contains(Object[] types, Object type) {
int size = types.length;
for (int i = 0; i < size; i++) {
if (type.equals(types[i])) {
@@ -1178,7 +1277,7 @@
}
return false;
}
-
+
private void addContainerTransaction(TransactionAttribute attribute, String ejbName, Method method, AssemblyDescriptor assemblyDescriptor) {
ContainerTransaction ctx = new ContainerTransaction(cast(attribute.value()), ejbName, method.getName(), asStrings(method.getParameterTypes()));
assemblyDescriptor.getContainerTransaction().add(ctx);
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java?view=diff&rev=521589&r1=521588&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java Thu Mar 22 22:15:56 2007
@@ -290,6 +290,12 @@
return appInfo;
}
+ public EjbJarInfo configureApplication(EjbJar ejbJar) throws OpenEJBException {
+ String moduleId = (ejbJar.getId() == null) ? ejbJar.getId(): ejbJar.toString();
+ EjbModule ejbModule = new EjbModule(Thread.currentThread().getContextClassLoader(), moduleId, moduleId, ejbJar, null);
+ return configureApplication(ejbModule);
+ }
+
public EjbJarInfo configureApplication(EjbModule ejbModule) throws OpenEJBException {
AppModule appModule = new AppModule(ejbModule.getClassLoader(), ejbModule.getJarLocation());
appModule.getEjbModules().add(ejbModule);
Copied: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/GroupPrincipal.java (from r521122, incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/GroupPrincipal.java)
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/GroupPrincipal.java?view=diff&rev=521589&p1=incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/GroupPrincipal.java&r1=521122&p2=incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/GroupPrincipal.java&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/GroupPrincipal.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/GroupPrincipal.java Thu Mar 22 22:15:56 2007
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.openejb.server.security;
+package org.apache.openejb.core.security;
import java.security.Principal;
Copied: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/PropertiesLoginModule.java (from r521122, incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/PropertiesLoginModule.java)
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/PropertiesLoginModule.java?view=diff&rev=521589&p1=incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/PropertiesLoginModule.java&r1=521122&p2=incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/PropertiesLoginModule.java&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/PropertiesLoginModule.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/PropertiesLoginModule.java Thu Mar 22 22:15:56 2007
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.openejb.server.security;
+package org.apache.openejb.core.security;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
Copied: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/SecurityServiceImpl.java (from r521122, incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/SecurityServiceImpl.java)
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/SecurityServiceImpl.java?view=diff&rev=521589&p1=incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/SecurityServiceImpl.java&r1=521122&p2=incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/SecurityServiceImpl.java&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/SecurityServiceImpl.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/SecurityServiceImpl.java Thu Mar 22 22:15:56 2007
@@ -14,10 +14,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.openejb.server.security;
+package org.apache.openejb.core.security;
import org.apache.openejb.spi.SecurityService;
-import org.apache.openejb.DeploymentInfo;
import org.apache.openejb.InterfaceType;
import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.core.ThreadContextListener;
@@ -80,7 +79,7 @@
ThreadContext.addThreadContextListener(this);
}
- public Serializable login(String username, String password) throws LoginException {
+ public Object login(String username, String password) throws LoginException {
LoginContext context = new LoginContext("PropertiesLogin", new UsernamePasswordCallbackHandler(username, password));
context.login();
@@ -111,7 +110,7 @@
CoreDeploymentInfo deploymentInfo = newContext.getDeploymentInfo();
- SecurityContext securityContext = oldContext.get(SecurityContext.class);
+ SecurityContext securityContext = (oldContext != null) ? oldContext.get(SecurityContext.class) : null;
if (deploymentInfo.getRunAsSubject() != null){
@@ -120,7 +119,7 @@
} else if (securityContext == null){
Subject subject = clientIdentity.get();
- // TODO: Maybe use a default subject if client subject doesn't exist
+ // TODO: Maybe use a default subject if client subject doesn't exist
securityContext = new SecurityContext(subject);
}
@@ -131,7 +130,11 @@
public void contextExited(ThreadContext exitedContext, ThreadContext reenteredContext) {
- PolicyContext.setContextID(reenteredContext.getDeploymentInfo().getModuleID());
+ if (reenteredContext == null){
+ PolicyContext.setContextID(null);
+ } else {
+ PolicyContext.setContextID(reenteredContext.getDeploymentInfo().getModuleID());
+ }
}
@@ -231,7 +234,7 @@
}
public boolean isCallerAuthorized(Object securityIdentity, Collection<String> roleNames) {
- return false;
+ return true;
}
}
Copied: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/UserPrincipal.java (from r521122, incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/UserPrincipal.java)
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/UserPrincipal.java?view=diff&rev=521589&p1=incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/UserPrincipal.java&r1=521122&p2=incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/UserPrincipal.java&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/UserPrincipal.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/UserPrincipal.java Thu Mar 22 22:15:56 2007
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.openejb.server.security;
+package org.apache.openejb.core.security;
import java.security.Principal;
Copied: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/UsernamePasswordCallbackHandler.java (from r521122, incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/UsernamePasswordCallbackHandler.java)
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/UsernamePasswordCallbackHandler.java?view=diff&rev=521589&p1=incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/UsernamePasswordCallbackHandler.java&r1=521122&p2=incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/UsernamePasswordCallbackHandler.java&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/UsernamePasswordCallbackHandler.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/UsernamePasswordCallbackHandler.java Thu Mar 22 22:15:56 2007
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.openejb.server.security;
+package org.apache.openejb.core.security;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml?view=diff&rev=521589&r1=521588&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml Thu Mar 22 22:15:56 2007
@@ -216,6 +216,11 @@
provider-type="SecurityService"
class-name="org.apache.openejb.ri.sp.PseudoSecurityService"/>
+ <ServiceProvider
+ id="New Security Service"
+ provider-type="SecurityService"
+ class-name="org.apache.openejb.core.security.SecurityServiceImpl"/>
+
<!--
# ================================================
# Default Transaction Manager implementation
Copied: incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/security/PropertiesLoginModuleTest.java (from r520838, incubator/openejb/trunk/openejb3/server/openejb-security/src/test/java/org/apache/openejb/server/security/PropertiesLoginModuleTest.java)
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/security/PropertiesLoginModuleTest.java?view=diff&rev=521589&p1=incubator/openejb/trunk/openejb3/server/openejb-security/src/test/java/org/apache/openejb/server/security/PropertiesLoginModuleTest.java&r1=520838&p2=incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/security/PropertiesLoginModuleTest.java&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/server/openejb-security/src/test/java/org/apache/openejb/server/security/PropertiesLoginModuleTest.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/security/PropertiesLoginModuleTest.java Thu Mar 22 22:15:56 2007
@@ -17,9 +17,9 @@
package org.apache.openejb.core.security;
import junit.framework.TestCase;
-import org.apache.openejb.server.security.GroupPrincipal;
-import org.apache.openejb.server.security.UserPrincipal;
-import org.apache.openejb.server.security.UsernamePasswordCallbackHandler;
+import org.apache.openejb.core.security.GroupPrincipal;
+import org.apache.openejb.core.security.UserPrincipal;
+import org.apache.openejb.core.security.UsernamePasswordCallbackHandler;
import javax.security.auth.Subject;
import javax.security.auth.login.FailedLoginException;
Added: incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/security/SecurityTest.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/security/SecurityTest.java?view=auto&rev=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/security/SecurityTest.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/security/SecurityTest.java Thu Mar 22 22:15:56 2007
@@ -0,0 +1,121 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.core.security;
+
+import junit.framework.TestCase;
+import org.apache.openejb.core.ivm.naming.InitContextFactory;
+import org.apache.openejb.config.ConfigurationFactory;
+import org.apache.openejb.config.EjbModule;
+import org.apache.openejb.assembler.classic.Assembler;
+import org.apache.openejb.assembler.classic.ProxyFactoryInfo;
+import org.apache.openejb.assembler.classic.TransactionServiceInfo;
+import org.apache.openejb.assembler.classic.SecurityServiceInfo;
+import org.apache.openejb.assembler.classic.ConnectionManagerInfo;
+import org.apache.openejb.assembler.classic.StatelessSessionContainerInfo;
+import org.apache.openejb.assembler.classic.EjbJarInfo;
+import org.apache.openejb.jee.EjbJar;
+import org.apache.openejb.jee.AssemblyDescriptor;
+import org.apache.openejb.jee.EnterpriseBean;
+import org.apache.openejb.jee.StatelessBean;
+import org.apache.openejb.jee.Interceptor;
+import org.apache.openejb.jee.InterceptorBinding;
+import org.apache.openejb.jee.NamedMethod;
+import org.apache.openejb.jee.MethodPermission;
+import org.apache.openejb.jee.Method;
+
+import javax.naming.InitialContext;
+import javax.ejb.Stateless;
+import javax.annotation.security.RolesAllowed;
+import javax.annotation.security.PermitAll;
+import javax.annotation.security.DenyAll;
+import java.util.List;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class SecurityTest extends TestCase {
+
+
+ public void test() throws Exception {
+
+ }
+ public void _test() throws Exception {
+ System.setProperty(javax.naming.Context.INITIAL_CONTEXT_FACTORY, InitContextFactory.class.getName());
+
+ ConfigurationFactory config = new ConfigurationFactory();
+ Assembler assembler = new Assembler();
+
+ assembler.createProxyFactory(config.configureService(ProxyFactoryInfo.class));
+ assembler.createTransactionManager(config.configureService(TransactionServiceInfo.class));
+ assembler.createSecurityService(config.configureService(SecurityServiceInfo.class));
+
+ assembler.createConnectionManager(config.configureService(ConnectionManagerInfo.class));
+
+ // containers
+ assembler.createContainer(config.configureService(StatelessSessionContainerInfo.class));
+
+ EjbJar ejbJar = new EjbJar("SecurityTest");
+
+ ejbJar.addEnterpriseBean(new StatelessBean(FooBean.class));
+
+ List<MethodPermission> permissions = ejbJar.getAssemblyDescriptor().getMethodPermission();
+
+ assembler.createApplication(config.configureApplication(ejbJar));
+
+ InitialContext ctx = new InitialContext();
+// Target target = (Target) ctx.lookup("TargetBeanBusinessLocal");
+ }
+
+
+ @Stateless
+ public static class FooBean implements Foo {
+ @RolesAllowed({"Manager"})
+ public String allowManager(String s) {
+ return s;
+ }
+
+ @RolesAllowed({"Manager", "Employee"})
+ public String allowEmployee(String s) {
+ return s;
+ }
+
+ @PermitAll
+ public String allowEveryone(String s) {
+ return s;
+ }
+
+ @DenyAll
+ public String excluded(String s) {
+ return s;
+ }
+ }
+
+ public static interface Foo {
+
+ @RolesAllowed({"Manager"})
+ String allowManager(String s);
+
+ @RolesAllowed({"Manager","Employee"})
+ String allowEmployee(String s);
+
+ @PermitAll
+ String allowEveryone(String s);
+
+ @DenyAll
+ String excluded(String s);
+ }
+}
Copied: incubator/openejb/trunk/openejb3/container/openejb-core/src/test/resources/groups.properties (from r520838, incubator/openejb/trunk/openejb3/server/openejb-security/src/test/resources/groups.properties)
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/test/resources/groups.properties?view=diff&rev=521589&p1=incubator/openejb/trunk/openejb3/server/openejb-security/src/test/resources/groups.properties&r1=520838&p2=incubator/openejb/trunk/openejb3/container/openejb-core/src/test/resources/groups.properties&r2=521589
==============================================================================
(empty)
Copied: incubator/openejb/trunk/openejb3/container/openejb-core/src/test/resources/login.config (from r520838, incubator/openejb/trunk/openejb3/server/openejb-security/src/test/resources/login.config)
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/test/resources/login.config?view=diff&rev=521589&p1=incubator/openejb/trunk/openejb3/server/openejb-security/src/test/resources/login.config&r1=520838&p2=incubator/openejb/trunk/openejb3/container/openejb-core/src/test/resources/login.config&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/server/openejb-security/src/test/resources/login.config (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/test/resources/login.config Thu Mar 22 22:15:56 2007
@@ -15,7 +15,7 @@
* limitations under the License.
*/
PropertiesLogin {
- org.apache.openejb.server.security.PropertiesLoginModule required
+ org.apache.openejb.core.security.PropertiesLoginModule required
debug=true
org.apache.openejb.jaas.properties.users="users.properties"
org.apache.openejb.jaas.properties.groups="groups.properties";
Copied: incubator/openejb/trunk/openejb3/container/openejb-core/src/test/resources/users.properties (from r520838, incubator/openejb/trunk/openejb3/server/openejb-security/src/test/resources/users.properties)
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/test/resources/users.properties?view=diff&rev=521589&p1=incubator/openejb/trunk/openejb3/server/openejb-security/src/test/resources/users.properties&r1=520838&p2=incubator/openejb/trunk/openejb3/container/openejb-core/src/test/resources/users.properties&r2=521589
==============================================================================
(empty)
Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EjbJar.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EjbJar.java?view=diff&rev=521589&r1=521588&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EjbJar.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EjbJar.java Thu Mar 22 22:15:56 2007
@@ -91,6 +91,12 @@
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
protected String version;
+ public EjbJar() {
+ }
+
+ public EjbJar(String id) {
+ this.id = id;
+ }
@XmlElement(name = "description", required = true)
public Text[] getDescriptions() {
Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ExcludeList.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ExcludeList.java?view=diff&rev=521589&r1=521588&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ExcludeList.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ExcludeList.java Thu Mar 22 22:15:56 2007
@@ -68,6 +68,10 @@
return this.method;
}
+ public void addMethod(Method method){
+ getMethod().add(method);
+ }
+
public String getId() {
return id;
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/Method.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/Method.java?view=diff&rev=521589&r1=521588&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/Method.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/Method.java Thu Mar 22 22:15:56 2007
@@ -231,6 +231,16 @@
@XmlTransient
protected TextMap description = new TextMap();
+ public Method(String ejbName, java.lang.reflect.Method method) {
+ this.ejbName = ejbName;
+ this.methodName = method.getName();
+ MethodParams methodParams = new MethodParams();
+ for (Class<?> type : method.getParameterTypes()) {
+ methodParams.getMethodParam().add(type.getCanonicalName());
+ }
+ this.methodParams = methodParams;
+ }
+
public Method(String ejbName, String methodName, String... parameters) {
this.ejbName = ejbName;
this.methodName = methodName;
Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/MethodPermission.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/MethodPermission.java?view=diff&rev=521589&r1=521588&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/MethodPermission.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/MethodPermission.java Thu Mar 22 22:15:56 2007
@@ -87,12 +87,12 @@
return this.roleName;
}
- public EmptyType getUnchecked() {
- return unchecked;
+ public boolean getUnchecked() {
+ return unchecked != null;
}
- public void setUnchecked(EmptyType value) {
- this.unchecked = value;
+ public void setUnchecked(boolean b) {
+ this.unchecked = (b) ? new EmptyType() : null;
}
public List<Method> getMethod() {
Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/RunAs.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/RunAs.java?view=diff&rev=521589&r1=521588&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/RunAs.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/RunAs.java Thu Mar 22 22:15:56 2007
@@ -51,6 +51,13 @@
@XmlID
protected String id;
+ public RunAs() {
+ }
+
+ public RunAs(String roleName) {
+ this.roleName = roleName;
+ }
+
public List<Text> getDescription() {
if (description == null) {
description = new ArrayList<Text>();
Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/SecurityIdentity.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/SecurityIdentity.java?view=diff&rev=521589&r1=521588&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/SecurityIdentity.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/SecurityIdentity.java Thu Mar 22 22:15:56 2007
@@ -79,6 +79,10 @@
this.runAs = value;
}
+ public void setRunAs(String value) {
+ this.runAs = new RunAs(value);
+ }
+
public String getId() {
return id;
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/SecurityRoleRef.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/SecurityRoleRef.java?view=diff&rev=521589&r1=521588&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/SecurityRoleRef.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/SecurityRoleRef.java Thu Mar 22 22:15:56 2007
@@ -59,6 +59,19 @@
@XmlTransient
protected TextMap description = new TextMap();
+
+ public SecurityRoleRef() {
+ }
+
+ public SecurityRoleRef(String roleName) {
+ this.roleName = roleName;
+ }
+
+ public SecurityRoleRef(String roleName, String roleLink) {
+ this.roleName = roleName;
+ this.roleLink = roleLink;
+ }
+
@XmlElement(name = "description", required = true)
public Text[] getDescriptions() {
return description.toArray();
Modified: incubator/openejb/trunk/openejb3/server/pom.xml
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/server/pom.xml?view=diff&rev=521589&r1=521588&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/server/pom.xml (original)
+++ incubator/openejb/trunk/openejb3/server/pom.xml Thu Mar 22 22:15:56 2007
@@ -40,7 +40,6 @@
<module>openejb-corba</module>
<module>openejb-derbynet</module>
<module>openejb-hsql</module>
- <module>openejb-security</module>
</modules>
<dependencies>
<!--