use cache for ldap roles
git-svn-id: https://svn.apache.org/repos/asf/archiva/redback/redback-core/trunk@1435593 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
c40d920036
commit
aa0cbd265e
@ -102,8 +102,13 @@ public class LdapRbacManager
|
||||
@Inject
|
||||
private LdapController ldapController;
|
||||
|
||||
@Inject
|
||||
@Named( value = "cache#ldapRoles" )
|
||||
private Cache<String, Role> rolesCache;
|
||||
|
||||
private boolean writableLdap = false;
|
||||
|
||||
|
||||
@PostConstruct
|
||||
public void initialize()
|
||||
{
|
||||
@ -472,6 +477,11 @@ public Role getRole( String roleName )
|
||||
throws RbacManagerException
|
||||
{
|
||||
|
||||
Role role = rolesCache.get( roleName );
|
||||
if ( role != null )
|
||||
{
|
||||
return role;
|
||||
}
|
||||
LdapConnection ldapConnection = null;
|
||||
DirContext context = null;
|
||||
//verify it's a ldap group
|
||||
@ -492,9 +502,12 @@ public Role getRole( String roleName )
|
||||
{
|
||||
throw new RbacManagerException( e.getMessage(), e );
|
||||
}
|
||||
Role role = this.rbacImpl.getRole( roleName );
|
||||
return ( role == null ) ? new RoleImpl( roleName ) : role;
|
||||
role = this.rbacImpl.getRole( roleName );
|
||||
role = ( role == null ) ? new RoleImpl( roleName ) : role;
|
||||
|
||||
rolesCache.put( roleName, role );
|
||||
|
||||
return role;
|
||||
}
|
||||
|
||||
public Map<String, Role> getRoles( Collection<String> roleNames )
|
||||
@ -715,6 +728,7 @@ public void removeRole( Role role )
|
||||
{
|
||||
throw new RbacPermanentException( "Unable to delete permanent role [" + role.getName() + "]" );
|
||||
}
|
||||
rolesCache.remove( role.getName() );
|
||||
if ( writableLdap )
|
||||
{
|
||||
LdapConnection ldapConnection = null;
|
||||
@ -790,12 +804,20 @@ public boolean roleExists( String name )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if ( rolesCache.get( name ) != null )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
LdapConnection ldapConnection = null;
|
||||
DirContext context = null;
|
||||
try
|
||||
{
|
||||
ldapConnection = ldapConnectionFactory.getConnection();
|
||||
context = ldapConnection.getDirContext();
|
||||
if ( rolesCache.hasKey( name ) )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return ldapRoleMapper.hasRole( context, name );
|
||||
}
|
||||
catch ( MappingException e )
|
||||
@ -843,6 +865,7 @@ public synchronized Role saveRole( Role role )
|
||||
ldapConnection = ldapConnectionFactory.getConnection();
|
||||
context = ldapConnection.getDirContext();
|
||||
ldapRoleMapper.saveRole( role.getName(), context );
|
||||
|
||||
if ( !role.getChildRoleNames().isEmpty() )
|
||||
{
|
||||
for ( String roleName : role.getChildRoleNames() )
|
||||
@ -861,7 +884,10 @@ public synchronized Role saveRole( Role role )
|
||||
throw new RbacManagerException( e.getMessage(), e );
|
||||
}
|
||||
}
|
||||
return this.rbacImpl.saveRole( role );
|
||||
role = this.rbacImpl.saveRole( role );
|
||||
rolesCache.put( role.getName(), role );
|
||||
|
||||
return role;
|
||||
//return new RoleImpl( role.getName(), role.getPermissions() );
|
||||
}
|
||||
|
||||
|
@ -31,4 +31,15 @@
|
||||
<context:component-scan
|
||||
base-package="org.apache.archiva.redback.rbac.ldap"/>
|
||||
|
||||
<bean name="cache#ldapRoles" class="org.apache.archiva.redback.components.cache.ehcache.EhcacheCache"
|
||||
init-method="initialize">
|
||||
<property name="diskPersistent" value="false"/>
|
||||
<property name="eternal" value="false"/>
|
||||
<property name="maxElementsInMemory" value="1000"/>
|
||||
<property name="memoryEvictionPolicy" value="LRU"/>
|
||||
<property name="name" value="ldapRoles"/>
|
||||
<property name="timeToIdleSeconds" value="300"/>
|
||||
<property name="timeToLiveSeconds" value="600"/>
|
||||
</bean>
|
||||
|
||||
</beans>
|
Loading…
x
Reference in New Issue
Block a user