Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.apache.archiva.redback.authentication.ldap;
  
  /*
   * 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.
  */
 
 
LdapBindAuthenticator:

Author(s):
Jesse McConnell <jesse@codehaus.org>
 
 @Service"authenticator#ldap" )
 public class LdapBindAuthenticator
     implements Authenticator
 {
 
     private Logger log = LoggerFactory.getLoggergetClass() );
 
     @Inject
     @Named( value = "userMapper#ldap" )
     private UserMapper mapper;
 
     @Inject
     @Named( value = "ldapConnectionFactory#configurable" )
 
     @Inject
     @Named( value = "userConfiguration" )
     private UserConfiguration config;
 
     @Inject
 
     public String getId()
     {
         return "LdapBindAuthenticator";
     }
 
         throws AuthenticationException
     {
 
         if ( !.getBoolean"ldap.bind.authenticator.enabled" ) || (
             !.getBoolean"ldap.bind.authenticator.allowEmptyPasswords"false ) && StringUtils.isEmpty(
                 source.getPassword() ) ) )
         {
             return new AuthenticationResultfalsesource.getPrincipal(), null );
         }
 
         SearchControls ctls = new SearchControls();
 
         ctls.setCountLimit( 1 );
 
         ctls.setDerefLinkFlagtrue );
         ctls.setSearchScope. );
 
         String filter = "(&(objectClass=" + .getUserObjectClass() + ")"
             + ( .getUserFilter() != null ? .getUserFilter() : "" ) + "(" + .getUserIdAttribute() + "="
             + source.getPrincipal() + "))";
        .info"Searching for users with filter: \'{}\'" + " from base dn: {}"filter.getUserBaseDn() );
                                                              
        LdapConnection ldapConnection = getLdapConnection();
        LdapConnection authLdapConnection = null;
        NamingEnumeration<SearchResultresults = null;
        try
        {
            // check the cache for user's userDn in the ldap server
            String userDn = .getLdapUserDnsource.getPrincipal() );
            
            ifuserDn == null )
            {
                .debug"userDn for user {} not found in cache. Retrieving from ldap server.."source.getPrincipal() );
                DirContext context = ldapConnection.getDirContext();
                results = context.search.getUserBaseDn(), filterctls );
                .info"Found user?: {}"results.hasMoreElements() );
                if ( results.hasMoreElements() )
                {
                    SearchResult result = results.nextElement();
                    userDn = result.getNameInNamespace();
                    .debug"Adding userDn {} for user {} to the cache.."userDnsource.getPrincipal() );
                    // REDBACK-289/MRM-1488 cache the ldap user's userDn to lessen calls to ldap server
                    .addLdapUserDnsource.getPrincipal(), userDn );
                }
                else
                {
                    return new AuthenticationResultfalsesource.getPrincipal(), null );
                }
            }
            .info"Attempting Authenication: + {}"userDn );
            authLdapConnection = .getConnectionuserDnsource.getPassword() );
            return new AuthenticationResulttruesource.getPrincipal(), null );
        }
        catch ( LdapException e )
        {
            return new AuthenticationResultfalsesource.getPrincipal(), e );
        }
        catch ( NamingException e )
        {
            return new AuthenticationResultfalsesource.getPrincipal(), e );
        }
        finally
        {
            closeNamingEnumerationresults );
            closeLdapConnectionldapConnection );
            if ( authLdapConnection != null )
            {
                closeLdapConnectionauthLdapConnection );
            }
        }
    }
    public boolean supportsDataSourceAuthenticationDataSource source )
    {
        return ( source instanceof PasswordBasedAuthenticationDataSource );
    }
    {
        try
        {
            return .getConnection();
        }
        catch ( LdapException e )
        {
            .warn"failed to get a ldap connection " + e.getMessage(), e );
            throw new RuntimeException"failed to get a ldap connection " + e.getMessage(), e );
        }
    }
    private void closeLdapConnectionLdapConnection ldapConnection )
    {
        if ( ldapConnection != null )
        {
            ldapConnection.close();
        }
    }
    private void closeNamingEnumerationNamingEnumeration<SearchResultresults )
    {
        try
        {
            if ( results != null )
            {
                results.close();
            }
        }
        catch ( NamingException e )
        {
            .warn"skip exception closing naming search result " + e.getMessage() );
        }
    }
New to GrepCode? Check out our FAQ X