Author: jlim Date: Wed Nov 29 06:08:36 2006 New Revision: 480575 URL: http://svn.apache.org/viewvc?view=rev&rev=480575 Log: applied patch for http://issues.apache.org/activemq/browse/AMQ-908
Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/security/AuthorizationEntry.java incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/security/AuthorizationMapTest.java Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/security/AuthorizationEntry.java URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/security/AuthorizationEntry.java?view=diff&rev=480575&r1=480574&r2=480575 ============================================================================== --- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/security/AuthorizationEntry.java (original) +++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/security/AuthorizationEntry.java Wed Nov 29 06:08:36 2006 @@ -18,8 +18,9 @@ package org.apache.activemq.security; import org.apache.activemq.filter.DestinationMapEntry; -import org.apache.activemq.jaas.GroupPrincipal; +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; import java.util.Collections; import java.util.HashSet; import java.util.Set; @@ -39,6 +40,16 @@ private Set readACLs = Collections.EMPTY_SET; private Set writeACLs = Collections.EMPTY_SET; private Set adminACLs = Collections.EMPTY_SET; + + private String groupClass = "org.apache.activemq.jaas.GroupPrincipal"; + + public String getGroupClass() { + return groupClass; + } + + public void setGroupClass(String groupClass) { + this.groupClass = groupClass; + } public Set getAdminACLs() { return adminACLs; @@ -66,24 +77,59 @@ // helper methods for easier configuration in Spring // ------------------------------------------------------------------------- - public void setAdmin(String roles) { + public void setAdmin(String roles) throws Exception { setAdminACLs(parseACLs(roles)); } - public void setRead(String roles) { + public void setRead(String roles) throws Exception { setReadACLs(parseACLs(roles)); } - public void setWrite(String roles) { + public void setWrite(String roles) throws Exception { setWriteACLs(parseACLs(roles)); } - protected Set parseACLs(String roles) { + protected Set parseACLs(String roles) throws Exception { Set answer = new HashSet(); StringTokenizer iter = new StringTokenizer(roles, ","); while (iter.hasMoreTokens()) { String name = iter.nextToken().trim(); - answer.add(new GroupPrincipal(name)); + Class[] paramClass = new Class[1]; + paramClass[0] = String.class; + + Object[] param = new Object[1]; + param[0] = new String(name); + + try { + Class cls = Class.forName(groupClass); + + Constructor[] constructors = cls.getConstructors(); + int i; + for (i=0; i<constructors.length; i++) { + Class[] paramTypes = constructors[i].getParameterTypes(); + if (paramTypes.length!=0 && paramTypes[0].equals(paramClass[0])) break; + } + if (i < constructors.length) { + Object instance = constructors[i].newInstance(param); + answer.add(instance); + } + else { + Object instance = cls.newInstance(); + Method[] methods = cls.getMethods(); + i=0; + for (i=0; i<methods.length; i++) { + Class[] paramTypes = methods[i].getParameterTypes(); + if (paramTypes.length!=0 && methods[i].getName().equals("setName") && paramTypes[0].equals(paramClass[0])) break; + } + + if (i < methods.length) { + methods[i].invoke(instance, param); + answer.add(instance); + } + else throw new NoSuchMethodException(); + } + } + catch (Exception e) { throw e; } } return answer; } Modified: incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/security/AuthorizationMapTest.java URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/security/AuthorizationMapTest.java?view=diff&rev=480575&r1=480574&r2=480575 ============================================================================== --- incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/security/AuthorizationMapTest.java (original) +++ incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/security/AuthorizationMapTest.java Wed Nov 29 06:08:36 2006 @@ -65,13 +65,24 @@ List entries = new ArrayList(); AuthorizationEntry entry = new AuthorizationEntry(); + entry.setGroupClass("org.apache.activemq.jaas.GroupPrincipal"); entry.setQueue(">"); - entry.setRead("admins"); + try { + entry.setRead("admins"); + } catch (Exception e) { + fail(e.toString()); + } + + entries.add(entry); - + // entry using default org.apache.activemq.jaas.GroupPrincipal class entry = new AuthorizationEntry(); entry.setQueue("USERS.>"); - entry.setRead("users"); + try { + entry.setRead("users"); + } catch (Exception e) { + fail(e.toString()); + } entries.add(entry); answer.setAuthorizationEntries(entries); @@ -86,19 +97,31 @@ AuthorizationEntry entry = new AuthorizationEntry(); entry.setQueue(">"); - entry.setRead("admins"); + try { + entry.setRead("admins"); + } catch (Exception e) { + fail(e.toString()); + } entries.add(entry); entry = new AuthorizationEntry(); entry.setQueue("USERS.>"); - entry.setRead("users"); + try { + entry.setRead("users"); + } catch (Exception e) { + fail(e.toString()); + } entries.add(entry); answer.setAuthorizationEntries(entries); //create entry for temporary queue TempDestinationAuthorizationEntry tEntry = new TempDestinationAuthorizationEntry(); - tEntry.setAdmin("tempDestAdmins"); + try { + tEntry.setAdmin("tempDestAdmins"); + } catch (Exception e) { + fail(e.toString()); + } answer.setTempDestinationAuthorizationEntry(tEntry);