djencks 2004/01/19 17:36:59
Modified: . maven.xml modules/core/src/java/org/apache/geronimo/security AbstractModuleConfiguration.java AbstractSecurityRealm.java EJBModuleConfiguration.java SecurityService.java WebModuleConfiguration.java modules/core/src/java/org/apache/geronimo/security/providers PropertiesFileSecurityRealm.java SQLSecurityRealm.java modules/core/src/test/org/apache/geronimo/security LoginPropertiesFileTest.java SecurityServiceTest.java modules/deployment/src/test-resources/etc bootstrapped-service.xml Log: gbeanization of security Revision Changes Path 1.51 +9 -1 incubator-geronimo/maven.xml Index: maven.xml =================================================================== RCS file: /home/cvs/incubator-geronimo/maven.xml,v retrieving revision 1.50 retrieving revision 1.51 diff -u -r1.50 -r1.51 --- maven.xml 19 Jan 2004 06:43:32 -0000 1.50 +++ maven.xml 20 Jan 2004 01:36:58 -0000 1.51 @@ -659,6 +659,10 @@ <include name="jasper-compiler-4.0.4.jar"/> <include name="jasper-runtime-4.0.4.jar"/> </fileset> + <!-- security --> + <fileset dir="${maven.repo.local}/regexp/jars"> + <include name="regexp-1.3-dev.jar"/> + </fileset> </classpath> <arg value="file:${run.dir}/deployment/src/test-resources/etc/bootstrapped-service.xml"/> @@ -727,6 +731,10 @@ <fileset dir="${maven.repo.local}/tomcat/jars"> <include name="jasper-compiler-4.0.4.jar"/> <include name="jasper-runtime-4.0.4.jar"/> + </fileset> + <!-- security --> + <fileset dir="${maven.repo.local}/regexp/jars"> + <include name="regexp-1.3-dev.jar"/> </fileset> </classpath> 1.5 +33 -23 incubator-geronimo/modules/core/src/java/org/apache/geronimo/security/AbstractModuleConfiguration.java Index: AbstractModuleConfiguration.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/security/AbstractModuleConfiguration.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- AbstractModuleConfiguration.java 16 Jan 2004 02:10:46 -0000 1.4 +++ AbstractModuleConfiguration.java 20 Jan 2004 01:36:58 -0000 1.5 @@ -67,13 +67,20 @@ import org.apache.geronimo.kernel.service.GeronimoMBeanContext; import org.apache.geronimo.kernel.service.GeronimoMBeanInfo; import org.apache.geronimo.kernel.service.GeronimoMBeanTarget; +import org.apache.geronimo.gbean.GBeanInfo; +import org.apache.geronimo.gbean.GBeanInfoFactory; +import org.apache.geronimo.gbean.GOperationInfo; +import org.apache.geronimo.gbean.GAttributeInfo; +import org.apache.geronimo.gbean.GBean; /** * * @version $Revision$ $Date$ */ -public abstract class AbstractModuleConfiguration implements ModuleConfiguration, GeronimoMBeanTarget { +public abstract class AbstractModuleConfiguration implements ModuleConfiguration, GeronimoMBeanTarget, GBean { + + private static final GBeanInfo GBEAN_INFO; public static final String BASE_OBJECT_NAME = "geronimo.security:type=ModuleConfiguration"; @@ -97,13 +104,15 @@ } } - + /** + * Implement configuration from supplied metadata (dds) in subclasses. + */ public void doStart() { } public void doStop() { - + delete(); } public void doFail() { @@ -228,6 +237,7 @@ * * <p> This operation has no affect on any linked <code>PolicyConfigurations</code> other than removing any links * involving the deleted <code>PolicyConfiguration<code>.</p> + * * @throws java.lang.SecurityException if called by an <code>AccessControlContext</code> that has not been granted * the "setPolicy" <code>SecurityPermission</code>. * @throws GeronimoSecurityException if the implementation throws a checked exception that has not been accounted for by @@ -235,26 +245,10 @@ * construction) in the thrown <code>GeronimoSecurityException</code>. */ public void delete() throws GeronimoSecurityException { - try { - if (context != null) { - try { - context.stop(); - } catch (Exception e) { - } - try { - context.getServer().unregisterMBean(context.getObjectName()); - } catch (InstanceNotFoundException e) { - throw new GeronimoSecurityException("Already deleted", e); - } catch (MBeanRegistrationException e) { - } - } - }finally { - try { - policyConfiguration.delete(); - } catch (PolicyContextException e) { - throw new GeronimoSecurityException("Unable to delete configuration", e.getCause()); - } + policyConfiguration.delete(); + } catch (PolicyContextException e) { + throw new GeronimoSecurityException("Unable to delete configuration", e.getCause()); } } @@ -301,6 +295,22 @@ } catch (PolicyContextException e) { throw new GeronimoSecurityException("Unable to obtain inService state", e.getCause()); } + } + + static { + GBeanInfoFactory infoFactory = new GBeanInfoFactory(AbstractModuleConfiguration.class.getName()); + infoFactory.addAttribute(new GAttributeInfo("ContextID", true)); + infoFactory.addAttribute(new GAttributeInfo("Roles", true));//??persistent + infoFactory.addOperation(new GOperationInfo("addRoleMapping", + new String[]{String.class.getName(), Collection.class.getName()})); + infoFactory.addOperation(new GOperationInfo("linkConfiguration", new String[]{ModuleConfiguration.class.getName()})); + infoFactory.addOperation(new GOperationInfo("commit")); + infoFactory.addOperation(new GOperationInfo("inService")); + GBEAN_INFO = infoFactory.getBeanInfo(); + } + + public static GBeanInfo getGBeanInfo() { + return GBEAN_INFO; } public static GeronimoMBeanInfo getGeronimoMBeanInfo() throws Exception { 1.5 +36 -2 incubator-geronimo/modules/core/src/java/org/apache/geronimo/security/AbstractSecurityRealm.java Index: AbstractSecurityRealm.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/security/AbstractSecurityRealm.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- AbstractSecurityRealm.java 2 Jan 2004 04:31:44 -0000 1.4 +++ AbstractSecurityRealm.java 20 Jan 2004 01:36:59 -0000 1.5 @@ -57,18 +57,35 @@ import org.apache.geronimo.kernel.service.GeronimoMBeanContext; import org.apache.geronimo.kernel.service.GeronimoMBeanTarget; +import org.apache.geronimo.gbean.GBean; +import org.apache.geronimo.gbean.GBeanInfo; +import org.apache.geronimo.gbean.GBeanInfoFactory; +import org.apache.geronimo.gbean.GAttributeInfo; +import org.apache.geronimo.gbean.GOperationInfo; +import org.apache.geronimo.gbean.GConstructorInfo; +import org.apache.regexp.RE; /** * * @version $Revision$ $Date$ */ -public abstract class AbstractSecurityRealm implements SecurityRealm, GeronimoMBeanTarget { +public abstract class AbstractSecurityRealm implements SecurityRealm, GeronimoMBeanTarget, GBean { + + private static final GBeanInfo GBEAN_INFO; private String realmName; protected GeronimoMBeanContext context; + //deprecated, GeronimoMBean only + public AbstractSecurityRealm() {} + + + public AbstractSecurityRealm(String realmName) { + this.realmName = realmName; + } + public String getRealmName() { return realmName; } @@ -96,5 +113,22 @@ } public void doFail() { + } + + static { + GBeanInfoFactory infoFactory = new GBeanInfoFactory(AbstractSecurityRealm.class.getName()); + infoFactory.addAttribute(new GAttributeInfo("RealmName", true)); + infoFactory.addOperation(new GOperationInfo("getGroupPrincipals")); + infoFactory.addOperation(new GOperationInfo("getGroupPrincipals", new String[] {RE.class.getName()})); + infoFactory.addOperation(new GOperationInfo("getUserPrincipals")); + infoFactory.addOperation(new GOperationInfo("getUserPrincipals", new String[] {RE.class.getName()})); + infoFactory.addOperation(new GOperationInfo("refresh")); + infoFactory.addOperation(new GOperationInfo("getAppConfigurationEntry")); + infoFactory.setConstructor(new GConstructorInfo(new String[] {"RealmName"}, new Class[] {String.class})); + GBEAN_INFO = infoFactory.getBeanInfo(); + } + + public static GBeanInfo getGBeanInfo() { + return GBEAN_INFO; } } 1.8 +25 -5 incubator-geronimo/modules/core/src/java/org/apache/geronimo/security/EJBModuleConfiguration.java Index: EJBModuleConfiguration.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/security/EJBModuleConfiguration.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- EJBModuleConfiguration.java 16 Jan 2004 02:10:46 -0000 1.7 +++ EJBModuleConfiguration.java 20 Jan 2004 01:36:59 -0000 1.8 @@ -71,6 +71,10 @@ import org.apache.geronimo.deployment.model.j2ee.SecurityRole; import org.apache.geronimo.kernel.service.GeronimoMBeanInfo; import org.apache.geronimo.security.util.ConfigurationUtil; +import org.apache.geronimo.gbean.GBeanInfo; +import org.apache.geronimo.gbean.GBeanInfoFactory; +import org.apache.geronimo.gbean.GConstructorInfo; +import org.apache.geronimo.gbean.GAttributeInfo; /** @@ -80,23 +84,25 @@ */ public class EJBModuleConfiguration extends AbstractModuleConfiguration { + private static final GBeanInfo GBEAN_INFO; + + private EjbJar ejbJar; + public EJBModuleConfiguration(String contextId, EjbJar ejbJar) throws GeronimoSecurityException { super(contextId); - configure(ejbJar); + this.ejbJar = ejbJar; } /** * Translate the EJB deployment descriptors into equivalent security * permissions. These permissions are placed into the appropriate * <code>PolicyConfiguration</code> object as defined in the JAAC spec. - * @param ejbJar the deployment descriptor from which to obtain the - * security constraints that are to be translated. * @throws GeronimoSecurityException if there is any violation of the semantics of * the security descriptor or the state of the module configuration. * @see javax.security.jacc.PolicyConfiguration * @see "Java Authorization Contract for Containers", section 3.1.3 */ - private void configure(EjbJar ejbJar) throws GeronimoSecurityException { + public void doStart() { PolicyConfiguration configuration = getPolicyConfiguration(); AssemblyDescriptor assemblyDescriptor = ejbJar.getAssemblyDescriptor(); @@ -147,6 +153,20 @@ } } } + } + + static { + GBeanInfoFactory infoFactory = new GBeanInfoFactory(EJBModuleConfiguration.class.getName(), AbstractModuleConfiguration.getGBeanInfo()); + //TODO make sure this attribute not backed by a getter or setter works. + infoFactory.addAttribute(new GAttributeInfo("EJBJar", true)); + infoFactory.setConstructor(new GConstructorInfo( + new String[] {"ContextID", "EJBJar"}, + new Class[] {String.class, EjbJar.class})); + GBEAN_INFO = infoFactory.getBeanInfo(); + } + + public static GBeanInfo getGBeanInfo() { + return GBEAN_INFO; } public static GeronimoMBeanInfo getGeronimoMBeanInfo() throws Exception { 1.8 +55 -25 incubator-geronimo/modules/core/src/java/org/apache/geronimo/security/SecurityService.java Index: SecurityService.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/security/SecurityService.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- SecurityService.java 16 Jan 2004 02:10:46 -0000 1.7 +++ SecurityService.java 20 Jan 2004 01:36:59 -0000 1.8 @@ -72,6 +72,12 @@ import org.apache.geronimo.kernel.service.GeronimoOperationInfo; import org.apache.geronimo.kernel.service.GeronimoParameterInfo; import org.apache.geronimo.security.util.ConfigurationUtil; +import org.apache.geronimo.gbean.GBeanInfo; +import org.apache.geronimo.gbean.GBeanInfoFactory; +import org.apache.geronimo.gbean.GOperationInfo; +import org.apache.geronimo.gbean.GAttributeInfo; +import org.apache.geronimo.gbean.GEndpointInfo; +import org.apache.geronimo.gbean.GConstructorInfo; /** @@ -81,6 +87,7 @@ */ public class SecurityService { + private static final GBeanInfo GBEAN_INFO; private final Log log = LogFactory.getLog(SecurityService.class); @@ -93,31 +100,13 @@ * Permissions that protect access to sensitive security information */ public static final GeronimoSecurityPermission CONFIGURE = new GeronimoSecurityPermission("configure"); - - public static GeronimoMBeanInfo getGeronimoMBeanInfo() throws Exception { - GeronimoMBeanInfo mbeanInfo = new GeronimoMBeanInfo(); - mbeanInfo.setTargetClass(SecurityService.class.getName()); - - mbeanInfo.addOperationInfo(new GeronimoOperationInfo("getModuleConfiguration", - new GeronimoParameterInfo[] { - new GeronimoParameterInfo("contextID", String.class, ""), - new GeronimoParameterInfo("remove", Boolean.TYPE, "")}, - GeronimoOperationInfo.ACTION_INFO, - "Get security configuration for module identified by contextID")); - - mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("PolicyConfigurationFactory", - true, true, - "The PolicyConfigurationFactory to use", - (Object)"org.apache.geronimo.security.GeronimoPolicyConfigurationFactory")); - - mbeanInfo.addEndpoint(new GeronimoMBeanEndpoint("Realms", SecurityRealm.class, ObjectName.getInstance(SecurityRealm.BASE_OBJECT_NAME + ",*"))); - mbeanInfo.addEndpoint(new GeronimoMBeanEndpoint("ModuleConfigurations", ModuleConfiguration.class, ObjectName.getInstance(AbstractModuleConfiguration.BASE_OBJECT_NAME + ",*"))); - - return mbeanInfo; + //deprecated, for geronimo mbean only + public SecurityService() { + this(null); } - public SecurityService() { + public SecurityService(String policyConfigurationFactory) { AccessController.doPrivileged( new java.security.PrivilegedAction() { public Object run() { @@ -137,6 +126,7 @@ throw (IllegalStateException)new IllegalStateException().initCause(pce); } + setPolicyConfigurationFactory(policyConfigurationFactory); } public String getPolicyConfigurationFactory() { @@ -145,8 +135,10 @@ public void setPolicyConfigurationFactory(String policyConfigurationFactory) { this.policyConfigurationFactory = policyConfigurationFactory; - - System.setProperty("javax.security.jacc.PolicyConfigurationFactory.provider", policyConfigurationFactory); + //TODO remove this if wrapper when GeronimoMBean leaves. + if (policyConfigurationFactory != null) { + System.setProperty("javax.security.jacc.PolicyConfigurationFactory.provider", policyConfigurationFactory); + } } /** @@ -224,6 +216,44 @@ } } return null; + } + + static { + GBeanInfoFactory infoFactory = new GBeanInfoFactory(SecurityService.class.getName()); + infoFactory.addAttribute(new GAttributeInfo("PolicyConfigurationFactory", true)); + infoFactory.addOperation(new GOperationInfo("getModuleConfiguration", new String[] {String.class.getName(), Boolean.TYPE.getName()})); + infoFactory.addEndpoint(new GEndpointInfo("Realms", SecurityRealm.class.getName())); + infoFactory.addEndpoint(new GEndpointInfo("ModuleConfigurations", ModuleConfiguration.class.getName())); + infoFactory.setConstructor(new GConstructorInfo( + new String[] {"PolicyConfigurationFactory"}, + new Class[] {String.class})); + GBEAN_INFO = infoFactory.getBeanInfo(); + } + + public static GBeanInfo getGBeanInfo() { + return GBEAN_INFO; + } + + public static GeronimoMBeanInfo getGeronimoMBeanInfo() throws Exception { + GeronimoMBeanInfo mbeanInfo = new GeronimoMBeanInfo(); + mbeanInfo.setTargetClass(SecurityService.class.getName()); + + mbeanInfo.addOperationInfo(new GeronimoOperationInfo("getModuleConfiguration", + new GeronimoParameterInfo[] { + new GeronimoParameterInfo("contextID", String.class, ""), + new GeronimoParameterInfo("remove", Boolean.TYPE, "")}, + GeronimoOperationInfo.ACTION_INFO, + "Get security configuration for module identified by contextID")); + + mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("PolicyConfigurationFactory", + true, true, + "The PolicyConfigurationFactory to use", + (Object)"org.apache.geronimo.security.GeronimoPolicyConfigurationFactory")); + + mbeanInfo.addEndpoint(new GeronimoMBeanEndpoint("Realms", SecurityRealm.class, ObjectName.getInstance(SecurityRealm.BASE_OBJECT_NAME + ",*"))); + mbeanInfo.addEndpoint(new GeronimoMBeanEndpoint("ModuleConfigurations", ModuleConfiguration.class, ObjectName.getInstance(AbstractModuleConfiguration.BASE_OBJECT_NAME + ",*"))); + + return mbeanInfo; } } 1.8 +26 -6 incubator-geronimo/modules/core/src/java/org/apache/geronimo/security/WebModuleConfiguration.java Index: WebModuleConfiguration.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/security/WebModuleConfiguration.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- WebModuleConfiguration.java 16 Jan 2004 02:10:46 -0000 1.7 +++ WebModuleConfiguration.java 20 Jan 2004 01:36:59 -0000 1.8 @@ -68,6 +68,10 @@ import org.apache.geronimo.deployment.model.geronimo.j2ee.RoleMappings; import org.apache.geronimo.deployment.model.geronimo.j2ee.Security; import org.apache.geronimo.deployment.model.geronimo.web.WebApp; +import org.apache.geronimo.gbean.GAttributeInfo; +import org.apache.geronimo.gbean.GBeanInfo; +import org.apache.geronimo.gbean.GBeanInfoFactory; +import org.apache.geronimo.gbean.GConstructorInfo; import org.apache.geronimo.kernel.service.GeronimoMBeanInfo; import org.apache.geronimo.security.util.ConfigurationUtil; @@ -88,23 +92,25 @@ */ public class WebModuleConfiguration extends AbstractModuleConfiguration { - public WebModuleConfiguration(String contextId, WebApp webApp) throws GeronimoSecurityException { + private static final GBeanInfo GBEAN_INFO; + + private WebApp webApp; + + public WebModuleConfiguration(String contextId, WebApp webApp) { super(contextId); - configure(webApp); + this.webApp = webApp; } /** * Translate the web deployment descriptors into equivalent security * permissions. These permissions are placed into the appropriate * <code>PolicyConfiguration</code> object as defined in the JAAC spec. - * @param webApp the deployment descriptor from which to obtain the - * security constraints that are to be translated. * @throws GeronimoSecurityException if there is any violation of the semantics of * the security descriptor or the state of the module configuration. * @see javax.security.jacc.PolicyConfiguration * @see "Java Authorization Contract for Containers", section 3.1.3 */ - private void configure(WebApp webApp) throws GeronimoSecurityException { + public void doStart() { PolicyConfiguration configuration = getPolicyConfiguration(); @@ -149,6 +155,20 @@ } } } + } + + static { + GBeanInfoFactory infoFactory = new GBeanInfoFactory(WebModuleConfiguration.class.getName(), AbstractModuleConfiguration.getGBeanInfo()); + //TODO make sure this attribute not backed by a getter or setter works. + infoFactory.addAttribute(new GAttributeInfo("WebApp", true)); + infoFactory.setConstructor(new GConstructorInfo( + new String[] {"ContextID", "WebApp"}, + new Class[] {String.class, WebApp.class})); + GBEAN_INFO = infoFactory.getBeanInfo(); + } + + public static GBeanInfo getGBeanInfo() { + return GBEAN_INFO; } public static GeronimoMBeanInfo getGeronimoMBeanInfo() throws Exception { 1.6 +48 -18 incubator-geronimo/modules/core/src/java/org/apache/geronimo/security/providers/PropertiesFileSecurityRealm.java Index: PropertiesFileSecurityRealm.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/security/providers/PropertiesFileSecurityRealm.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- PropertiesFileSecurityRealm.java 5 Jan 2004 18:56:34 -0000 1.5 +++ PropertiesFileSecurityRealm.java 20 Jan 2004 01:36:59 -0000 1.6 @@ -72,6 +72,10 @@ import org.apache.geronimo.kernel.service.GeronimoMBeanInfo; import org.apache.geronimo.security.AbstractSecurityRealm; import org.apache.geronimo.security.GeronimoSecurityException; +import org.apache.geronimo.gbean.GBeanInfo; +import org.apache.geronimo.gbean.GBeanInfoFactory; +import org.apache.geronimo.gbean.GAttributeInfo; +import org.apache.geronimo.gbean.GConstructorInfo; import org.apache.regexp.RE; @@ -80,6 +84,9 @@ * @version $Revision$ $Date$ */ public class PropertiesFileSecurityRealm extends AbstractSecurityRealm { + + private static final GBeanInfo GBEAN_INFO; + private boolean running = false; private URI usersURI; private URI groupsURI; @@ -87,17 +94,14 @@ Properties groups = new Properties(); final static String REALM_INSTANCE = "org.apache.geronimo.security.providers.PropertiesFileSecurityRealm"; + //deprecated for geronimombeans only + public PropertiesFileSecurityRealm() { + } - public static GeronimoMBeanInfo getGeronimoMBeanInfo() throws Exception { - GeronimoMBeanInfo mbeanInfo = new GeronimoMBeanInfo(); - - mbeanInfo.setTargetClass(PropertiesFileSecurityRealm.class.getName()); - - mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("RealmName", true, true, "The name of this security realm")); - mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("UsersURI", true, true, "The location of the users property file")); - mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("GroupsURI", true, true, "The location of the groups property file")); - - return mbeanInfo; + public PropertiesFileSecurityRealm(String realmName, URI usersURI, URI groupsURI) { + super(realmName); + setUsersURI(usersURI); + setGroupsURI(groupsURI); } public void doStart() { @@ -109,9 +113,6 @@ } public void doStop() { - usersURI = null; - groupsURI = null; - users.clear(); groups.clear(); running = false; @@ -125,7 +126,7 @@ if (running) { throw new IllegalStateException("Cannot change the Users URI after the realm is started"); } - this.usersURI = usersURI; + this.usersURI = usersURI == null ? null : usersURI.normalize(); } public URI getGroupsURI() { @@ -136,7 +137,7 @@ if (running) { throw new IllegalStateException("Cannot change the Groups URI after the realm is started"); } - this.groupsURI = groupsURI; + this.groupsURI = groupsURI == null ? null : groupsURI.normalize(); } public Set getGroupPrincipals() throws GeronimoSecurityException { @@ -191,8 +192,10 @@ public void refresh() throws GeronimoSecurityException { try { - users.load(new FileInputStream(new File(usersURI))); - groups.load(new FileInputStream(new File(groupsURI))); + users.load(usersURI.toURL().openStream()); + groups.load(groupsURI.toURL().openStream()); + //users.load(new FileInputStream(new File(usersURI))); + //groups.load(new FileInputStream(new File(groupsURI))); } catch (IOException e) { throw new GeronimoSecurityException(e); } @@ -209,4 +212,31 @@ return configuration; } + + static { + GBeanInfoFactory infoFactory = new GBeanInfoFactory(PropertiesFileSecurityRealm.class.getName(), AbstractSecurityRealm.getGBeanInfo()); + infoFactory.addAttribute(new GAttributeInfo("UsersURI", true)); + infoFactory.addAttribute(new GAttributeInfo("GroupsURI", true)); + infoFactory.setConstructor(new GConstructorInfo( + new String[]{"RealmName", "UsersURI", "GroupsURI"}, + new Class[]{String.class, URI.class, URI.class})); + GBEAN_INFO = infoFactory.getBeanInfo(); + } + + public static GBeanInfo getGBeanInfo() { + return GBEAN_INFO; + } + + public static GeronimoMBeanInfo getGeronimoMBeanInfo() throws Exception { + GeronimoMBeanInfo mbeanInfo = new GeronimoMBeanInfo(); + + mbeanInfo.setTargetClass(PropertiesFileSecurityRealm.class.getName()); + + mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("RealmName", true, true, "The name of this security realm")); + mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("UsersURI", true, true, "The location of the users property file")); + mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("GroupsURI", true, true, "The location of the groups property file")); + + return mbeanInfo; + } + } 1.6 +54 -14 incubator-geronimo/modules/core/src/java/org/apache/geronimo/security/providers/SQLSecurityRealm.java Index: SQLSecurityRealm.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/security/providers/SQLSecurityRealm.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- SQLSecurityRealm.java 11 Jan 2004 08:22:59 -0000 1.5 +++ SQLSecurityRealm.java 20 Jan 2004 01:36:59 -0000 1.6 @@ -64,11 +64,15 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; -import java.util.Set; import java.util.Map; +import java.util.Set; import javax.security.auth.login.AppConfigurationEntry; +import org.apache.geronimo.gbean.GAttributeInfo; +import org.apache.geronimo.gbean.GBeanInfo; +import org.apache.geronimo.gbean.GBeanInfoFactory; +import org.apache.geronimo.gbean.GConstructorInfo; import org.apache.geronimo.kernel.service.GeronimoAttributeInfo; import org.apache.geronimo.kernel.service.GeronimoMBeanInfo; import org.apache.geronimo.security.AbstractSecurityRealm; @@ -82,6 +86,9 @@ */ public class SQLSecurityRealm extends AbstractSecurityRealm { + + private static final GBeanInfo GBEAN_INFO; + private boolean running = false; private String connectionURL; private String user = ""; @@ -93,19 +100,18 @@ final static String REALM_INSTANCE = "org.apache.geronimo.security.providers.SQLSecurityRealm"; - public static GeronimoMBeanInfo getGeronimoMBeanInfo() throws Exception { - GeronimoMBeanInfo mbeanInfo = new GeronimoMBeanInfo(); + /** + * @deprecated + */ + public SQLSecurityRealm() {} - mbeanInfo.setTargetClass(PropertiesFileSecurityRealm.class.getName()); - - mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("RealmName", true, true, "The name of this security realm")); - mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("ConnectionURL", true, true, "The URL of the data source")); - mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("User", true, true, "The user name to use when logging in to the data source")); - mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("Password", true, true, "The password to use when logging in to the data source")); - mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("UserSelect", true, true, "The SQL statement to used to obtain the list of users")); - mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("GroupSelect", true, true, "The SQL statement to used to obtain the list of groups")); - - return mbeanInfo; + public SQLSecurityRealm(String realmName, String connectionURL, String user, String password, String userSelect, String groupSelect) { + super(realmName); + this.connectionURL = connectionURL; + this.user = user; + this.password = password; + this.userSelect = userSelect; + this.groupSelect = groupSelect; } public void doStart() { @@ -306,4 +312,38 @@ return configuration; } + + static { + GBeanInfoFactory infoFactory = new GBeanInfoFactory(PropertiesFileSecurityRealm.class.getName(), AbstractSecurityRealm.getGBeanInfo()); + infoFactory.addAttribute(new GAttributeInfo("RealmName", true)); + infoFactory.addAttribute(new GAttributeInfo("ConnectionURL", true)); + infoFactory.addAttribute(new GAttributeInfo("User", true)); + infoFactory.addAttribute(new GAttributeInfo("Password", true)); + infoFactory.addAttribute(new GAttributeInfo("UserSelect", true)); + infoFactory.addAttribute(new GAttributeInfo("GroupSelect", true)); + infoFactory.setConstructor(new GConstructorInfo( + new String[] {"RealmName", "ConnectionURL", "User", "UserSelect", "GroupSelect"}, + new Class[] {String.class, String.class, String.class, String.class, String.class})); + GBEAN_INFO = infoFactory.getBeanInfo(); + } + + public static GBeanInfo getGBeanInfo() { + return GBEAN_INFO; + } + + public static GeronimoMBeanInfo getGeronimoMBeanInfo() throws Exception { + GeronimoMBeanInfo mbeanInfo = new GeronimoMBeanInfo(); + + mbeanInfo.setTargetClass(PropertiesFileSecurityRealm.class.getName()); + + mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("RealmName", true, true, "The name of this security realm")); + mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("ConnectionURL", true, true, "The URL of the data source")); + mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("User", true, true, "The user name to use when logging in to the data source")); + mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("Password", true, true, "The password to use when logging in to the data source")); + mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("UserSelect", true, true, "The SQL statement to used to obtain the list of users")); + mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("GroupSelect", true, true, "The SQL statement to used to obtain the list of groups")); + + return mbeanInfo; + } + } 1.3 +4 -5 incubator-geronimo/modules/core/src/test/org/apache/geronimo/security/LoginPropertiesFileTest.java Index: LoginPropertiesFileTest.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/core/src/test/org/apache/geronimo/security/LoginPropertiesFileTest.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- LoginPropertiesFileTest.java 28 Dec 2003 19:34:05 -0000 1.2 +++ LoginPropertiesFileTest.java 20 Jan 2004 01:36:59 -0000 1.3 @@ -82,10 +82,9 @@ securityService = new SecurityService(); - PropertiesFileSecurityRealm securityRealm = new PropertiesFileSecurityRealm(); - securityRealm.setRealmName("Foo"); - securityRealm.setUsersURI((new File(new File("."), "src/test-data/data/users.properties")).toURI()); - securityRealm.setGroupsURI((new File(new File("."), "src/test-data/data/groups.properties")).toURI()); + PropertiesFileSecurityRealm securityRealm = new PropertiesFileSecurityRealm("Foo", + (new File(new File("."), "src/test-data/data/users.properties")).toURI(), + (new File(new File("."), "src/test-data/data/groups.properties")).toURI()); securityRealm.doStart(); securityService.setRealms(Collections.singleton(securityRealm)); 1.4 +5 -5 incubator-geronimo/modules/core/src/test/org/apache/geronimo/security/SecurityServiceTest.java Index: SecurityServiceTest.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/core/src/test/org/apache/geronimo/security/SecurityServiceTest.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- SecurityServiceTest.java 16 Jan 2004 02:10:46 -0000 1.3 +++ SecurityServiceTest.java 20 Jan 2004 01:36:59 -0000 1.4 @@ -82,10 +82,10 @@ securityService = new SecurityService(); - PropertiesFileSecurityRealm securityRealm = new PropertiesFileSecurityRealm(); - securityRealm.setRealmName("Foo"); - securityRealm.setUsersURI((new File(new File("."), "src/test-data/data/users.properties")).toURI()); - securityRealm.setGroupsURI((new File(new File("."), "src/test-data/data/groups.properties")).toURI()); + PropertiesFileSecurityRealm securityRealm = new PropertiesFileSecurityRealm("Foo", + (new File(new File("."), "src/test-data/data/users.properties")).toURI(), + (new File(new File("."), "src/test-data/data/groups.properties")).toURI()); + securityRealm.doStart(); securityService.setRealms(Collections.singleton(securityRealm)); EjbJar ejbJar = new EjbJar(); 1.3 +21 -2 incubator-geronimo/modules/deployment/src/test-resources/etc/bootstrapped-service.xml Index: bootstrapped-service.xml =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/deployment/src/test-resources/etc/bootstrapped-service.xml,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- bootstrapped-service.xml 19 Jan 2004 06:52:33 -0000 1.2 +++ bootstrapped-service.xml 20 Jan 2004 01:36:59 -0000 1.3 @@ -18,6 +18,25 @@ </endpoint> </gbean> + <!-- security --> + <gbean class="org.apache.geronimo.security.SecurityService" objectName="geronimo.security:type=SecurityService"> + <default attribute="PolicyConfigurationFactory" type="java.lang.String">org.apache.geronimo.security.GeronimoPolicyConfigurationFactory</default> + <endpoint name="Realms"> + <pattern>geronimo.security:type=SecurityRealm,*</pattern> + </endpoint> + <endpoint name="ModuleConfigurations"> + <pattern>geronimo.security:type=ModuleConfiguration,*</pattern> + </endpoint> + </gbean> + + <gbean class="org.apache.geronimo.security.providers.PropertiesFileSecurityRealm" objectName="geronimo.security:type=SecurityRealm,name=Foo"> + <default attribute="RealmName" type="java.lang.String">Foo</default> + <default attribute="UsersURI" type="java.net.URI">file:./core/src/test-data/data/users.properties</default> + <default attribute="GroupsURI" type="java.net.URI">file:./core/src/test-data/data/groups.properties</default> + </gbean> + + <!-- web --> + <gbean class="org.apache.geronimo.web.jetty.JettyWebContainer" objectName="geronimo.web:type=WebContainer,container=Jetty"> <default attribute="DefaultWebXmlURI" type="java.net.URI">web/src/deploy/jetty/webdefault.xml</default> <endpoint name="WebAccessLogs"> @@ -34,8 +53,8 @@ <gbean class="org.apache.geronimo.web.jetty.JettyWebConnector" objectName="geronimo.web:type=WebConnector,container=Jetty,port=8080"> <default attribute="Protocol" type="java.lang.String">http</default> <!-- IMPORTANT localhost here will result in access only from 127.0.0.1--> - <default attribute="Interface" type="java.lang.String">localhost</default> - <!--default attribute="Interface" type="java.lang.String">192.168.1.1</default--> + <!-- leaving the Interface attribute out will bind to all interfaces--> + <!--default attribute="Interface" type="java.lang.String">localhost</default--> <default attribute="Port" type="int">8080</default> <default attribute="MaxConnections" type="int">10</default> <default attribute="MaxIdleTime" type="int">10</default>