Author: olamy
Date: Thu Jan 3 21:42:57 2013
New Revision: 1428612
URL: http://svn.apache.org/viewvc?rev=1428612&view=rev
Log:
improve performance to retrieve all groups of a user
Modified:
archiva/redback/redback-core/trunk/redback-rbac/redback-rbac-providers/redback-rbac-ldap/src/main/java/org/apache/archiva/redback/rbac/ldap/DefaultLdapRoleMapper.java
archiva/redback/redback-core/trunk/redback-rbac/redback-rbac-providers/redback-rbac-ldap/src/test/java/org/apache/archiva/redback/rbac/ldap/TestLdapRoleMapper.java
Modified:
archiva/redback/redback-core/trunk/redback-rbac/redback-rbac-providers/redback-rbac-ldap/src/main/java/org/apache/archiva/redback/rbac/ldap/DefaultLdapRoleMapper.java
URL:
http://svn.apache.org/viewvc/archiva/redback/redback-core/trunk/redback-rbac/redback-rbac-providers/redback-rbac-ldap/src/main/java/org/apache/archiva/redback/rbac/ldap/DefaultLdapRoleMapper.java?rev=1428612&r1=1428611&r2=1428612&view=diff
==============================================================================
---
archiva/redback/redback-core/trunk/redback-rbac/redback-rbac-providers/redback-rbac-ldap/src/main/java/org/apache/archiva/redback/rbac/ldap/DefaultLdapRoleMapper.java
(original)
+++
archiva/redback/redback-core/trunk/redback-rbac/redback-rbac-providers/redback-rbac-ldap/src/main/java/org/apache/archiva/redback/rbac/ldap/DefaultLdapRoleMapper.java
Thu Jan 3 21:42:57 2013
@@ -230,7 +230,7 @@ public class DefaultLdapRoleMapper
{
// TODO caching and a filter with uid
- List<String> allGroups = getAllGroups();
+ /*List<String> allGroups = getAllGroups();
List<String> userGroups = new ArrayList<String>();
for ( String group : allGroups )
{
@@ -241,7 +241,8 @@ public class DefaultLdapRoleMapper
}
}
return userGroups;
- /*
+ */
+
List<String> userGroups = new ArrayList<String>();
LdapConnection ldapConnection = null;
@@ -258,23 +259,21 @@ public class DefaultLdapRoleMapper
searchControls.setDerefLinkFlag( true );
searchControls.setSearchScope( SearchControls.SUBTREE_SCOPE );
- //String filter =
- // "(&(objectClass=" + getLdapGroupClass() + ")
(uniquemember=uid" + username + "," + this.getGroupsDn()
- // + "))";
-
String filter =
new StringBuilder().append( "(&" ).append( "(objectClass=" +
getLdapGroupClass() + ")" ).append(
"(uniquemember=" ).append( "uid=" + username + "," +
this.getBaseDn() ).append( ")" ).append(
")" ).toString();
- namingEnumeration = context.search( getGroupsDn(), filter,
searchControls );
+ log.debug( "filter: {}", filter );
- List<String> allMembers = new ArrayList<String>();
+ namingEnumeration = context.search( getGroupsDn(), filter,
searchControls );
while ( namingEnumeration.hasMore() )
{
SearchResult searchResult = namingEnumeration.next();
+ List<String> allMembers = new ArrayList<String>();
+
Attribute uniqueMemberAttr = searchResult.getAttributes().get(
"uniquemember" );
if ( uniqueMemberAttr != null )
@@ -293,6 +292,15 @@ public class DefaultLdapRoleMapper
close( allMembersEnum );
}
+ if ( allMembers.contains( username ) )
+ {
+ String groupName = searchResult.getName();
+ // cn=blabla we only want bla bla
+ groupName = StringUtils.substringAfter( groupName, "=" );
+ userGroups.add( groupName );
+
+ }
+
}
@@ -315,7 +323,7 @@ public class DefaultLdapRoleMapper
}
close( namingEnumeration );
}
- */
+
}
private void close( NamingEnumeration namingEnumeration )
Modified:
archiva/redback/redback-core/trunk/redback-rbac/redback-rbac-providers/redback-rbac-ldap/src/test/java/org/apache/archiva/redback/rbac/ldap/TestLdapRoleMapper.java
URL:
http://svn.apache.org/viewvc/archiva/redback/redback-core/trunk/redback-rbac/redback-rbac-providers/redback-rbac-ldap/src/test/java/org/apache/archiva/redback/rbac/ldap/TestLdapRoleMapper.java?rev=1428612&r1=1428611&r2=1428612&view=diff
==============================================================================
---
archiva/redback/redback-core/trunk/redback-rbac/redback-rbac-providers/redback-rbac-ldap/src/test/java/org/apache/archiva/redback/rbac/ldap/TestLdapRoleMapper.java
(original)
+++
archiva/redback/redback-core/trunk/redback-rbac/redback-rbac-providers/redback-rbac-ldap/src/test/java/org/apache/archiva/redback/rbac/ldap/TestLdapRoleMapper.java
Thu Jan 3 21:42:57 2013
@@ -57,9 +57,9 @@ import java.util.Map;
/**
* @author Olivier Lamy
*/
-@RunWith( SpringJUnit4ClassRunner.class )
-@ContextConfiguration( locations = {
"classpath*:/META-INF/spring-context.xml", "classpath*:/spring-context.xml" } )
-@DirtiesContext( classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD )
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = { "classpath*:/META-INF/spring-context.xml",
"classpath*:/spring-context.xml" })
+@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
public class TestLdapRoleMapper
extends TestCase
{
@@ -67,11 +67,11 @@ public class TestLdapRoleMapper
Logger log = LoggerFactory.getLogger( getClass() );
@Inject
- @Named( value = "userManager#ldap" )
+ @Named(value = "userManager#ldap")
private UserManager userManager;
@Inject
- @Named( value = "apacheDS#test" )
+ @Named(value = "apacheDS#test")
private ApacheDs apacheDs;
private String suffix;
@@ -84,7 +84,7 @@ public class TestLdapRoleMapper
private LdapCacheService ldapCacheService;
@Inject
- @Named( value = "ldapRoleMapper#test" )
+ @Named(value = "ldapRoleMapper#test")
LdapRoleMapper ldapRoleMapper;
private Map<String, List<String>> usersPerGroup;
@@ -188,7 +188,7 @@ public class TestLdapRoleMapper
BasicAttribute basicAttribute = new BasicAttribute( "uniquemember" );
for ( String user : users )
{
- basicAttribute.add( "uid=" + user + ",dc=archiva,dc=apache,dc=org"
);
+ basicAttribute.add( "uid=" + user + "," + suffix );//
dc=archiva,dc=apache,dc=org" );
}
attributes.put( basicAttribute );
@@ -234,7 +234,6 @@ public class TestLdapRoleMapper
}
-
private void assertExist( DirContext context, String dn, String attribute,
String value )
throws NamingException
{