7 changed files with 0 additions and 1100 deletions
@ -1,59 +0,0 @@ |
|||||||
/* Copyright 2004, 2005 Acegi Technology Pty Limited |
|
||||||
* |
|
||||||
* Licensed 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. |
|
||||||
*/ |
|
||||||
package org.acegisecurity.providers.dao.ldap; |
|
||||||
|
|
||||||
import javax.naming.NamingException; |
|
||||||
import javax.naming.directory.Attributes; |
|
||||||
|
|
||||||
import org.acegisecurity.providers.dao.ldap.support.BaseLdapTestCase; |
|
||||||
|
|
||||||
/** Tests to ensure the directory server we are running against is |
|
||||||
* configured as expected. |
|
||||||
* |
|
||||||
* @author robert.sanders |
|
||||||
*/ |
|
||||||
public class DirSetupTestCase extends BaseLdapTestCase { |
|
||||||
|
|
||||||
/** Simply test the connection to the test LDAP server; |
|
||||||
* if this test fails we know the server setup needs checked. |
|
||||||
* @throws NamingException |
|
||||||
*/ |
|
||||||
public void testConnection() throws NamingException { |
|
||||||
Object obj = getClientContext().lookup("ou=users"); |
|
||||||
//System.out.println( obj );
|
|
||||||
assertNotNull( obj ); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
public void testSimpleUidUser() throws NamingException { |
|
||||||
Attributes myAttrs = getClientContext().getAttributes("uid=one.user,ou=users"); |
|
||||||
assertEquals(8, myAttrs.size()); |
|
||||||
assertEquals("uid=one.user,ou=users,ou=system", myAttrs.get("dn").get() ); |
|
||||||
} |
|
||||||
|
|
||||||
public void testSimpleCnUser() throws NamingException { |
|
||||||
Attributes myAttrs = getClientContext().getAttributes("cn=user.two,ou=users"); |
|
||||||
assertEquals(8, myAttrs.size()); |
|
||||||
assertEquals("cn=user.two,ou=users,ou=system", myAttrs.get("dn").get() ); |
|
||||||
assertEquals("Two", myAttrs.get("givenName").get() ); |
|
||||||
} |
|
||||||
|
|
||||||
public void testOthersUsers() throws NamingException { |
|
||||||
Attributes myAttrs = getClientContext().getAttributes("uid=other.two,ou=others"); |
|
||||||
assertEquals("uid=other.two,ou=others,ou=system", myAttrs.get("dn").get() ); |
|
||||||
assertEquals("Other", myAttrs.get("givenName").get() ); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
@ -1,132 +0,0 @@ |
|||||||
/* Copyright 2004, 2005 Acegi Technology Pty Limited |
|
||||||
* |
|
||||||
* Licensed 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. |
|
||||||
*/ |
|
||||||
|
|
||||||
package org.acegisecurity.providers.dao.ldap; |
|
||||||
|
|
||||||
import org.acegisecurity.BadCredentialsException; |
|
||||||
import org.acegisecurity.providers.dao.ldap.support.BaseLdapTestCase; |
|
||||||
import org.acegisecurity.userdetails.UserDetails; |
|
||||||
|
|
||||||
import javax.naming.NamingException; |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Set of JUnit tests for the LdapPasswordAuthenticationDao. |
|
||||||
* |
|
||||||
* @author $author$ |
|
||||||
* @version $Revision$ |
|
||||||
*/ |
|
||||||
public class LdapPasswordAuthenticationDaoTests extends BaseLdapTestCase { |
|
||||||
|
|
||||||
private LdapPasswordAuthenticationDao dao; |
|
||||||
private String DEFAULT_ROLE = "DEFAULT_ROLE"; |
|
||||||
|
|
||||||
public static void main(String[] args) { |
|
||||||
LdapPasswordAuthenticationDaoTests ats = new LdapPasswordAuthenticationDaoTests(); |
|
||||||
ats.setUp(); |
|
||||||
try { |
|
||||||
ats.testSimpleUidUser(); |
|
||||||
} catch (Throwable t) { |
|
||||||
t.printStackTrace(); |
|
||||||
} finally { |
|
||||||
System.exit(0); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** Check to see that a user with no roles can not login |
|
||||||
* (this is the correct behavior the last time I checked the Acegi Docs). |
|
||||||
* |
|
||||||
*/ |
|
||||||
public void testEmptyRoles() { |
|
||||||
dao.setUsernameFormat("uid={0},ou=users,ou=system"); |
|
||||||
|
|
||||||
try { |
|
||||||
UserDetails userDetails = dao.loadUserByUsernameAndPassword("user.two", |
|
||||||
"plaintext2"); |
|
||||||
fail("No roles are accessible for user; this test _should_ fail."); |
|
||||||
} catch (BadCredentialsException ex) { |
|
||||||
assertTrue("No roles are accessible for user; this test _should_ fail.", |
|
||||||
ex.getMessage().startsWith(LdapPasswordAuthenticationDao.BAD_CREDENTIALS_EXCEPTION_MESSAGE)); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/** Test that the user who is identified by |
|
||||||
* Common Name (cn=..) can be authenticated. */ |
|
||||||
public void testSimpleCnUser() throws NamingException { |
|
||||||
dao.setUsernameFormat("cn={0},ou=users,ou=system"); |
|
||||||
dao.setUserLookupNameFormat("cn={0},ou=users"); |
|
||||||
dao.setDefaultRole(DEFAULT_ROLE); |
|
||||||
|
|
||||||
try { |
|
||||||
UserDetails userDetails = dao.loadUserByUsernameAndPassword("User Two", |
|
||||||
"plaintext2"); |
|
||||||
assertEquals(1, userDetails.getAuthorities().length); |
|
||||||
assertEquals(DEFAULT_ROLE, |
|
||||||
userDetails.getAuthorities()[0].getAuthority()); |
|
||||||
} catch (BadCredentialsException ex) { |
|
||||||
fail(); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/** Test that the user who is identified by |
|
||||||
* UID (uid=..) can be authenticated. */ |
|
||||||
public void testSimpleUidUser() throws NamingException { |
|
||||||
dao.setUsernameFormat("uid={0},ou=users,ou=system"); |
|
||||||
dao.setUserLookupNameFormat("uid={0},ou=users"); |
|
||||||
dao.setDefaultRole(DEFAULT_ROLE); |
|
||||||
|
|
||||||
try { |
|
||||||
System.out.println("Attempting user auth."); |
|
||||||
|
|
||||||
UserDetails userDetails = dao.loadUserByUsernameAndPassword("one.user", |
|
||||||
"plaintext"); |
|
||||||
|
|
||||||
//System.out.println( "UserDetails = " + userDetails );
|
|
||||||
|
|
||||||
assertEquals(1, userDetails.getAuthorities().length); |
|
||||||
assertEquals(DEFAULT_ROLE, |
|
||||||
userDetails.getAuthorities()[0].getAuthority()); |
|
||||||
} catch (BadCredentialsException ex) { |
|
||||||
System.out.println("Unable to authenticate user."); |
|
||||||
ex.printStackTrace(); |
|
||||||
fail(); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/** Test that a login w/ a bad password fails. */ |
|
||||||
public void testSimpleUidUserBadPassword() throws NamingException { |
|
||||||
dao.setUsernameFormat("uid={0},ou=users,ou=system"); |
|
||||||
dao.setUserLookupNameFormat("uid={0},ou=users"); |
|
||||||
dao.setDefaultRole(DEFAULT_ROLE); |
|
||||||
|
|
||||||
try { |
|
||||||
UserDetails userDetails = dao.loadUserByUsernameAndPassword("one.user", |
|
||||||
"plainlywrong"); |
|
||||||
fail(); |
|
||||||
} catch (BadCredentialsException ex) { |
|
||||||
assertTrue(true); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Setup the basic properties of our LdapPasswordAuthenticationDao |
|
||||||
*/ |
|
||||||
protected void setUp() { |
|
||||||
dao = new LdapPasswordAuthenticationDao(); |
|
||||||
dao.setUrl("ldap://localhost:389/ou=system"); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
@ -1,431 +0,0 @@ |
|||||||
/* Copyright 2004, 2005 Acegi Technology Pty Limited |
|
||||||
* |
|
||||||
* Licensed 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. |
|
||||||
*/ |
|
||||||
|
|
||||||
package org.acegisecurity.providers.dao.ldap; |
|
||||||
|
|
||||||
import java.util.HashMap; |
|
||||||
import java.util.Map; |
|
||||||
|
|
||||||
import junit.framework.TestCase; |
|
||||||
import org.acegisecurity.AccountExpiredException; |
|
||||||
import org.acegisecurity.Authentication; |
|
||||||
import org.acegisecurity.AuthenticationServiceException; |
|
||||||
import org.acegisecurity.BadCredentialsException; |
|
||||||
import org.acegisecurity.CredentialsExpiredException; |
|
||||||
import org.acegisecurity.DisabledException; |
|
||||||
import org.acegisecurity.GrantedAuthority; |
|
||||||
import org.acegisecurity.GrantedAuthorityImpl; |
|
||||||
import org.acegisecurity.LockedException; |
|
||||||
import org.acegisecurity.providers.TestingAuthenticationToken; |
|
||||||
import org.acegisecurity.providers.UsernamePasswordAuthenticationToken; |
|
||||||
import org.acegisecurity.providers.dao.UserCache; |
|
||||||
import org.acegisecurity.providers.dao.cache.EhCacheBasedUserCache; |
|
||||||
import org.acegisecurity.providers.dao.cache.NullUserCache; |
|
||||||
import org.acegisecurity.userdetails.User; |
|
||||||
import org.acegisecurity.userdetails.UserDetails; |
|
||||||
import org.acegisecurity.userdetails.UsernameNotFoundException; |
|
||||||
|
|
||||||
import org.springframework.dao.DataAccessException; |
|
||||||
import org.springframework.dao.DataRetrievalFailureException; |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Tests {@link PasswordDaoAuthenticationProvider}. |
|
||||||
* |
|
||||||
* @author Karel Miarka |
|
||||||
*/ |
|
||||||
public class PasswordDaoAuthenticationProviderTests extends TestCase { |
|
||||||
//~ Methods ================================================================
|
|
||||||
|
|
||||||
public final void setUp() throws Exception { |
|
||||||
super.setUp(); |
|
||||||
} |
|
||||||
|
|
||||||
public static void main(String[] args) { |
|
||||||
junit.textui.TestRunner.run(PasswordDaoAuthenticationProviderTests.class); |
|
||||||
} |
|
||||||
|
|
||||||
public void testAuthenticateFailsForIncorrectPasswordCase() { |
|
||||||
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken("marissa", |
|
||||||
"KOala"); |
|
||||||
|
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider(); |
|
||||||
provider.setPasswordAuthenticationDao(new MockAuthenticationDaoUserMarissa()); |
|
||||||
provider.setUserCache(new MockUserCache()); |
|
||||||
|
|
||||||
try { |
|
||||||
provider.authenticate(token); |
|
||||||
fail("Should have thrown BadCredentialsException"); |
|
||||||
} catch (BadCredentialsException expected) { |
|
||||||
assertTrue(true); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public void testAuthenticateFailsIfAccountExpired() { |
|
||||||
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken("peter", |
|
||||||
"opal"); |
|
||||||
|
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider(); |
|
||||||
provider.setPasswordAuthenticationDao(new MockAuthenticationDaoUserPeterAccountExpired()); |
|
||||||
provider.setUserCache(new MockUserCache()); |
|
||||||
|
|
||||||
try { |
|
||||||
provider.authenticate(token); |
|
||||||
fail("Should have thrown AccountExpiredException"); |
|
||||||
} catch (AccountExpiredException expected) { |
|
||||||
assertTrue(true); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public void testAuthenticateFailsIfAccountLocked() { |
|
||||||
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken("peter", |
|
||||||
"opal"); |
|
||||||
|
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider(); |
|
||||||
provider.setPasswordAuthenticationDao(new MockAuthenticationDaoUserPeterAccountLocked()); |
|
||||||
provider.setUserCache(new MockUserCache()); |
|
||||||
|
|
||||||
try { |
|
||||||
provider.authenticate(token); |
|
||||||
fail("Should have thrown AccountExpiredException"); |
|
||||||
} catch (LockedException expected) { |
|
||||||
assertTrue(true); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public void testAuthenticateFailsIfCredentialsExpired() { |
|
||||||
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken("peter", |
|
||||||
"opal"); |
|
||||||
|
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider(); |
|
||||||
provider.setPasswordAuthenticationDao(new MockAuthenticationDaoUserPeterCredentialsExpired()); |
|
||||||
provider.setUserCache(new MockUserCache()); |
|
||||||
|
|
||||||
try { |
|
||||||
provider.authenticate(token); |
|
||||||
fail("Should have thrown CredentialsExpiredException"); |
|
||||||
} catch (CredentialsExpiredException expected) { |
|
||||||
assertTrue(true); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public void testAuthenticateFailsIfUserDisabled() { |
|
||||||
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken("peter", |
|
||||||
"opal"); |
|
||||||
|
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider(); |
|
||||||
provider.setPasswordAuthenticationDao(new MockAuthenticationDaoUserPeter()); |
|
||||||
provider.setUserCache(new MockUserCache()); |
|
||||||
|
|
||||||
try { |
|
||||||
provider.authenticate(token); |
|
||||||
fail("Should have thrown DisabledException"); |
|
||||||
} catch (DisabledException expected) { |
|
||||||
assertTrue(true); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public void testAuthenticateFailsWhenAuthenticationDaoHasBackendFailure() { |
|
||||||
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken("marissa", |
|
||||||
"koala"); |
|
||||||
|
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider(); |
|
||||||
provider.setPasswordAuthenticationDao(new MockAuthenticationDaoSimulateBackendError()); |
|
||||||
provider.setUserCache(new MockUserCache()); |
|
||||||
|
|
||||||
try { |
|
||||||
provider.authenticate(token); |
|
||||||
fail("Should have thrown AuthenticationServiceException"); |
|
||||||
} catch (AuthenticationServiceException expected) { |
|
||||||
assertTrue(true); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public void testAuthenticateFailsWithInvalidPassword() { |
|
||||||
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken("marissa", |
|
||||||
"INVALID_PASSWORD"); |
|
||||||
|
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider(); |
|
||||||
provider.setPasswordAuthenticationDao(new MockAuthenticationDaoUserMarissa()); |
|
||||||
provider.setUserCache(new MockUserCache()); |
|
||||||
|
|
||||||
try { |
|
||||||
provider.authenticate(token); |
|
||||||
fail("Should have thrown BadCredentialsException"); |
|
||||||
} catch (BadCredentialsException expected) { |
|
||||||
assertTrue(true); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public void testAuthenticateFailsWithInvalidUsername() { |
|
||||||
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken("INVALID_USER", |
|
||||||
"koala"); |
|
||||||
|
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider(); |
|
||||||
provider.setPasswordAuthenticationDao(new MockAuthenticationDaoUserMarissa()); |
|
||||||
provider.setUserCache(new MockUserCache()); |
|
||||||
|
|
||||||
try { |
|
||||||
provider.authenticate(token); |
|
||||||
fail("Should have thrown BadCredentialsException"); |
|
||||||
} catch (BadCredentialsException expected) { |
|
||||||
assertTrue(true); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public void testAuthenticateFailsWithMixedCaseUsernameIfDefaultChanged() { |
|
||||||
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken("MaRiSSA", |
|
||||||
"koala"); |
|
||||||
|
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider(); |
|
||||||
provider.setPasswordAuthenticationDao(new MockAuthenticationDaoUserMarissa()); |
|
||||||
provider.setUserCache(new MockUserCache()); |
|
||||||
|
|
||||||
try { |
|
||||||
provider.authenticate(token); |
|
||||||
fail("Should have thrown BadCredentialsException"); |
|
||||||
} catch (BadCredentialsException expected) { |
|
||||||
assertTrue(true); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public void testAuthenticates() { |
|
||||||
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken("marissa", |
|
||||||
"koala"); |
|
||||||
token.setDetails("192.168.0.1"); |
|
||||||
|
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider(); |
|
||||||
provider.setPasswordAuthenticationDao(new MockAuthenticationDaoUserMarissa()); |
|
||||||
provider.setUserCache(new MockUserCache()); |
|
||||||
|
|
||||||
Authentication result = provider.authenticate(token); |
|
||||||
|
|
||||||
if (!(result instanceof UsernamePasswordAuthenticationToken)) { |
|
||||||
fail( |
|
||||||
"Should have returned instance of UsernamePasswordAuthenticationToken"); |
|
||||||
} |
|
||||||
|
|
||||||
UsernamePasswordAuthenticationToken castResult = (UsernamePasswordAuthenticationToken) result; |
|
||||||
assertEquals(User.class, castResult.getPrincipal().getClass()); |
|
||||||
assertEquals("koala", castResult.getCredentials()); |
|
||||||
assertEquals("ROLE_ONE", castResult.getAuthorities()[0].getAuthority()); |
|
||||||
assertEquals("ROLE_TWO", castResult.getAuthorities()[1].getAuthority()); |
|
||||||
assertEquals("192.168.0.1", castResult.getDetails()); |
|
||||||
} |
|
||||||
|
|
||||||
public void testAuthenticatesASecondTime() { |
|
||||||
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken("marissa", |
|
||||||
"koala"); |
|
||||||
|
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider(); |
|
||||||
provider.setPasswordAuthenticationDao(new MockAuthenticationDaoUserMarissa()); |
|
||||||
provider.setUserCache(new MockUserCache()); |
|
||||||
|
|
||||||
Authentication result = provider.authenticate(token); |
|
||||||
|
|
||||||
if (!(result instanceof UsernamePasswordAuthenticationToken)) { |
|
||||||
fail( |
|
||||||
"Should have returned instance of UsernamePasswordAuthenticationToken"); |
|
||||||
} |
|
||||||
|
|
||||||
// Now try to authenticate with the previous result (with its UserDetails)
|
|
||||||
Authentication result2 = provider.authenticate(result); |
|
||||||
|
|
||||||
if (!(result2 instanceof UsernamePasswordAuthenticationToken)) { |
|
||||||
fail( |
|
||||||
"Should have returned instance of UsernamePasswordAuthenticationToken"); |
|
||||||
} |
|
||||||
|
|
||||||
assertEquals(result.getCredentials(), result2.getCredentials()); |
|
||||||
} |
|
||||||
|
|
||||||
public void testAuthenticatesWithForcePrincipalAsString() { |
|
||||||
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken("marissa", |
|
||||||
"koala"); |
|
||||||
|
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider(); |
|
||||||
provider.setPasswordAuthenticationDao(new MockAuthenticationDaoUserMarissa()); |
|
||||||
provider.setUserCache(new MockUserCache()); |
|
||||||
provider.setForcePrincipalAsString(true); |
|
||||||
|
|
||||||
Authentication result = provider.authenticate(token); |
|
||||||
|
|
||||||
if (!(result instanceof UsernamePasswordAuthenticationToken)) { |
|
||||||
fail( |
|
||||||
"Should have returned instance of UsernamePasswordAuthenticationToken"); |
|
||||||
} |
|
||||||
|
|
||||||
UsernamePasswordAuthenticationToken castResult = (UsernamePasswordAuthenticationToken) result; |
|
||||||
assertEquals(String.class, castResult.getPrincipal().getClass()); |
|
||||||
assertEquals("marissa", castResult.getPrincipal()); |
|
||||||
} |
|
||||||
|
|
||||||
public void testGettersSetters() { |
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider(); |
|
||||||
provider.setUserCache(new EhCacheBasedUserCache()); |
|
||||||
assertEquals(EhCacheBasedUserCache.class, |
|
||||||
provider.getUserCache().getClass()); |
|
||||||
|
|
||||||
assertFalse(provider.isForcePrincipalAsString()); |
|
||||||
provider.setForcePrincipalAsString(true); |
|
||||||
assertTrue(provider.isForcePrincipalAsString()); |
|
||||||
} |
|
||||||
|
|
||||||
public void testStartupFailsIfNoAuthenticationDao() |
|
||||||
throws Exception { |
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider(); |
|
||||||
|
|
||||||
try { |
|
||||||
provider.afterPropertiesSet(); |
|
||||||
fail("Should have thrown IllegalArgumentException"); |
|
||||||
} catch (IllegalArgumentException expected) { |
|
||||||
assertTrue(true); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public void testStartupFailsIfNoUserCacheSet() throws Exception { |
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider(); |
|
||||||
provider.setPasswordAuthenticationDao(new MockAuthenticationDaoUserMarissa()); |
|
||||||
assertEquals(NullUserCache.class, provider.getUserCache().getClass()); |
|
||||||
provider.setUserCache(null); |
|
||||||
|
|
||||||
try { |
|
||||||
provider.afterPropertiesSet(); |
|
||||||
fail("Should have thrown IllegalArgumentException"); |
|
||||||
} catch (IllegalArgumentException expected) { |
|
||||||
assertTrue(true); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public void testStartupSuccess() throws Exception { |
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider(); |
|
||||||
PasswordAuthenticationDao dao = new MockAuthenticationDaoUserMarissa(); |
|
||||||
provider.setPasswordAuthenticationDao(dao); |
|
||||||
provider.setUserCache(new MockUserCache()); |
|
||||||
assertEquals(dao, provider.getPasswordAuthenticationDao()); |
|
||||||
provider.afterPropertiesSet(); |
|
||||||
assertTrue(true); |
|
||||||
} |
|
||||||
|
|
||||||
public void testSupports() { |
|
||||||
PasswordDaoAuthenticationProvider provider = new PasswordDaoAuthenticationProvider(); |
|
||||||
assertTrue(provider.supports(UsernamePasswordAuthenticationToken.class)); |
|
||||||
assertTrue(!provider.supports(TestingAuthenticationToken.class)); |
|
||||||
} |
|
||||||
|
|
||||||
//~ Inner Classes ==========================================================
|
|
||||||
|
|
||||||
private class MockAuthenticationDaoSimulateBackendError |
|
||||||
implements PasswordAuthenticationDao { |
|
||||||
public UserDetails loadUserByUsernameAndPassword(String username, |
|
||||||
String password) |
|
||||||
throws BadCredentialsException, DataAccessException { |
|
||||||
throw new DataRetrievalFailureException( |
|
||||||
"This mock simulator is designed to fail"); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private class MockAuthenticationDaoUserMarissa |
|
||||||
implements PasswordAuthenticationDao { |
|
||||||
public UserDetails loadUserByUsernameAndPassword(String username, |
|
||||||
String password) |
|
||||||
throws BadCredentialsException, DataAccessException { |
|
||||||
if ("marissa".equals(username) && "koala".equals(password)) { |
|
||||||
return new User("marissa", "koala", true, true, true, true, |
|
||||||
new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl( |
|
||||||
"ROLE_TWO")}); |
|
||||||
} else { |
|
||||||
throw new BadCredentialsException("Invalid credentials"); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private class MockAuthenticationDaoUserPeter |
|
||||||
implements PasswordAuthenticationDao { |
|
||||||
public UserDetails loadUserByUsernameAndPassword(String username, |
|
||||||
String password) |
|
||||||
throws BadCredentialsException, DataAccessException { |
|
||||||
if ("peter".equals(username) && "opal".equals(password)) { |
|
||||||
return new User("peter", "opal", false, true, true, true, |
|
||||||
new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl( |
|
||||||
"ROLE_TWO")}); |
|
||||||
} else { |
|
||||||
throw new BadCredentialsException("Invalid credentials"); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private class MockAuthenticationDaoUserPeterAccountExpired |
|
||||||
implements PasswordAuthenticationDao { |
|
||||||
public UserDetails loadUserByUsernameAndPassword(String username, |
|
||||||
String password) |
|
||||||
throws UsernameNotFoundException, DataAccessException { |
|
||||||
if ("peter".equals(username)) { |
|
||||||
return new User("peter", "opal", true, false, true, true, |
|
||||||
new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl( |
|
||||||
"ROLE_TWO")}); |
|
||||||
} else { |
|
||||||
throw new UsernameNotFoundException("Could not find: " |
|
||||||
+ username); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private class MockAuthenticationDaoUserPeterAccountLocked |
|
||||||
implements PasswordAuthenticationDao { |
|
||||||
public UserDetails loadUserByUsernameAndPassword(String username, |
|
||||||
String password) |
|
||||||
throws UsernameNotFoundException, DataAccessException { |
|
||||||
if ("peter".equals(username)) { |
|
||||||
return new User("peter", "opal", true, true, true, false, |
|
||||||
new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl( |
|
||||||
"ROLE_TWO")}); |
|
||||||
} else { |
|
||||||
throw new UsernameNotFoundException("Could not find: " |
|
||||||
+ username); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private class MockAuthenticationDaoUserPeterCredentialsExpired |
|
||||||
implements PasswordAuthenticationDao { |
|
||||||
public UserDetails loadUserByUsernameAndPassword(String username, |
|
||||||
String password) |
|
||||||
throws UsernameNotFoundException, DataAccessException { |
|
||||||
if ("peter".equals(username)) { |
|
||||||
return new User("peter", "opal", true, true, false, true, |
|
||||||
new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl( |
|
||||||
"ROLE_TWO")}); |
|
||||||
} else { |
|
||||||
throw new UsernameNotFoundException("Could not find: " |
|
||||||
+ username); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private class MockUserCache implements UserCache { |
|
||||||
private Map cache = new HashMap(); |
|
||||||
|
|
||||||
public UserDetails getUserFromCache(String username) { |
|
||||||
return (User) cache.get(username); |
|
||||||
} |
|
||||||
|
|
||||||
public void putUserInCache(UserDetails user) { |
|
||||||
cache.put(user.getUsername(), user); |
|
||||||
} |
|
||||||
|
|
||||||
public void removeUserFromCache(String username) {} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,43 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
<h2>LDAP JUnit Tests and Helper Files.</h2> |
|
||||||
<p> |
|
||||||
Because the inter-class dependencies may not be obvious at first glance |
|
||||||
they are documented for this package; most of this complexity is on account |
|
||||||
of the JUnit design, hopefully future testing frameworks will be less intrusive. |
|
||||||
</p> |
|
||||||
<dl> |
|
||||||
<dt>LdapTestHelper</dt> |
|
||||||
<dd>Containing the majority of the code which references the |
|
||||||
apache directory server classes, LdapTestHelper is designed |
|
||||||
to be assigned as a static field in the BaseLdapTestCase, although |
|
||||||
it can be used elsewhere. LdapTestHelper contains all the code |
|
||||||
needed to start, initialize, and shutdown the directory server. |
|
||||||
</dd> |
|
||||||
|
|
||||||
<dt>DirContentsInitializer</dt> |
|
||||||
<dd>DirContentsInitializer contains the JNDI code |
|
||||||
used to load the directory server up with entries (users and groups). |
|
||||||
When I figure out how to correctly import LDIF files, DirContentsInitializer |
|
||||||
will probably be radically simplified. |
|
||||||
</dd> |
|
||||||
|
|
||||||
<dt>BaseLdapTestCase</dt> |
|
||||||
<dd>Contains common methods and fields that will probably |
|
||||||
be needed by any TestCase which interacts with the directory server, |
|
||||||
including a static reference to a LdapTestHelper instance. |
|
||||||
</dd> |
|
||||||
|
|
||||||
<dt>DirSetupTestCase</dt> |
|
||||||
<dd>Contains some simple code designed to test that DirContentsInitializer |
|
||||||
has functioned properly. If these tests fail then the |
|
||||||
other tests are expected to fail too. |
|
||||||
</dd> |
|
||||||
|
|
||||||
<dt>LdapPasswordAuthenticationTest</dt> |
|
||||||
<dd>Contains tests which configure a LdapPasswordAuthenticationDao bean and |
|
||||||
excersize it against the directory server. |
|
||||||
</dd> |
|
||||||
</dl> |
|
||||||
</body> |
|
||||||
</html> |
|
||||||
@ -1,84 +0,0 @@ |
|||||||
/* Copyright 2004, 2005 Acegi Technology Pty Limited |
|
||||||
* |
|
||||||
* Licensed 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. |
|
||||||
*/ |
|
||||||
|
|
||||||
package org.acegisecurity.providers.dao.ldap.support; |
|
||||||
|
|
||||||
import junit.framework.TestCase; |
|
||||||
|
|
||||||
import java.util.Hashtable; |
|
||||||
|
|
||||||
import javax.naming.Context; |
|
||||||
import javax.naming.NamingException; |
|
||||||
import javax.naming.directory.DirContext; |
|
||||||
import javax.naming.directory.InitialDirContext; |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* This class defines certain base properties needed by |
|
||||||
* all LDAP unit tests. It also uses the EmbeddedLdapServerController to |
|
||||||
* bootstrap an 'embedded' instance of the Apache Directory Server to |
|
||||||
* run the Unit tests against. |
|
||||||
*/ |
|
||||||
public class BaseLdapTestCase extends TestCase { |
|
||||||
//~ Static fields/initializers =============================================
|
|
||||||
|
|
||||||
// static finalizers, they'd be nice, as the EmbeddedLdapServerController
|
|
||||||
// never seems to get the chance to cleanup after itself
|
|
||||||
// Maybe JUnit4 will include such a thing.
|
|
||||||
protected static EmbeddedLdapServerController embeddedLdapServerController = new EmbeddedLdapServerController(); |
|
||||||
|
|
||||||
static { |
|
||||||
try { |
|
||||||
LdapDirInitializer.intializeDir( embeddedLdapServerController.getServerContext() ); |
|
||||||
} catch (NamingException e) { |
|
||||||
System.out.println("Error: unable to initialize LDAP Server for Unit tests."); |
|
||||||
System.out.println(" Unable to continue testing LDAP Authentication Dao without LDAP Server."); |
|
||||||
e.printStackTrace(); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/** Returns a 'client' connection to the embedded LDAP Server, using |
|
||||||
* JNDI to connect. |
|
||||||
*/ |
|
||||||
protected DirContext getClientContext() throws NamingException { |
|
||||||
Hashtable env = new Hashtable(); |
|
||||||
env.put(Context.PROVIDER_URL, "ldap://localhost:389/ou=system"); |
|
||||||
env.put(Context.INITIAL_CONTEXT_FACTORY, |
|
||||||
"com.sun.jndi.ldap.LdapCtxFactory"); |
|
||||||
env.put(Context.SECURITY_PRINCIPAL, "uid=admin,ou=system"); |
|
||||||
env.put(Context.SECURITY_CREDENTIALS, "secret"); |
|
||||||
|
|
||||||
return new InitialDirContext(env); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* This is a LDAP DirContext which connects directly to the |
|
||||||
* embedded Apache Directory Server against which the Unit tests |
|
||||||
* are run, as such the normal Unit tests should never need to |
|
||||||
* reference it (with the possible exception of comparing return values |
|
||||||
* between the Server Context and the Client Context). |
|
||||||
* |
|
||||||
* @see org.acegisecurity.providers.dao.ldap.support.EmbeddedLdapServerController |
|
||||||
* @see org.acegisecurity.providers.dao.ldap.support.LdapDirInitializer |
|
||||||
* |
|
||||||
* @return The server context for LDAP operations; used for things like |
|
||||||
* addding/removing users to to test against. |
|
||||||
*/ |
|
||||||
protected DirContext getServerContext() { |
|
||||||
return embeddedLdapServerController.getServerContext(); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
@ -1,228 +0,0 @@ |
|||||||
/* Copyright 2004, 2005 Acegi Technology Pty Limited |
|
||||||
* |
|
||||||
* Licensed 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. |
|
||||||
*/ |
|
||||||
package org.acegisecurity.providers.dao.ldap.support; |
|
||||||
|
|
||||||
import java.io.File; |
|
||||||
import java.io.IOException; |
|
||||||
import java.io.InputStream; |
|
||||||
import java.util.Hashtable; |
|
||||||
import java.util.Properties; |
|
||||||
|
|
||||||
import javax.naming.Context; |
|
||||||
import javax.naming.InitialContext; |
|
||||||
import javax.naming.Name; |
|
||||||
import javax.naming.NamingException; |
|
||||||
import javax.naming.directory.Attributes; |
|
||||||
import javax.naming.directory.DirContext; |
|
||||||
import javax.naming.directory.InitialDirContext; |
|
||||||
|
|
||||||
import org.acegisecurity.providers.ldap.LdapUtils; |
|
||||||
import org.apache.ldap.common.ldif.LdifIterator; |
|
||||||
import org.apache.ldap.common.ldif.LdifParser; |
|
||||||
import org.apache.ldap.common.ldif.LdifParserImpl; |
|
||||||
import org.apache.ldap.common.message.LockableAttributesImpl; |
|
||||||
import org.apache.ldap.common.name.LdapName; |
|
||||||
import org.apache.ldap.server.DirectoryService; |
|
||||||
import org.apache.ldap.server.configuration.MutableServerStartupConfiguration; |
|
||||||
import org.apache.ldap.server.configuration.ShutdownConfiguration; |
|
||||||
import org.apache.ldap.server.jndi.ServerContextFactory; |
|
||||||
|
|
||||||
/** |
|
||||||
* Used as static field in BaseLdapTestCase; |
|
||||||
* responsible for global state during JUnit tests - since |
|
||||||
* JUnit reinstantiates the test class for every method. |
|
||||||
* |
|
||||||
* @version $Id$ |
|
||||||
* |
|
||||||
*/ |
|
||||||
public class EmbeddedLdapServerController { |
|
||||||
|
|
||||||
static final int LDAP_PORT = 10389; |
|
||||||
|
|
||||||
private File tempDirectory; |
|
||||||
|
|
||||||
private DirContext serverContext; |
|
||||||
|
|
||||||
/** |
|
||||||
* |
|
||||||
*/ |
|
||||||
public EmbeddedLdapServerController() { |
|
||||||
// create temporary directory for directory-server to store files in
|
|
||||||
tempDirectory = initTempFiles(); |
|
||||||
// start the apache directory server
|
|
||||||
startServer(); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Creates if needed a temporary directory to store the apache directory |
|
||||||
* server files. Since I can't get the class to shutdown cleanly, |
|
||||||
* it also ensures a clean start by removing any files in the temp. directory. |
|
||||||
* |
|
||||||
* @return The directory that should be used to store temporary files in. |
|
||||||
*/ |
|
||||||
protected File initTempFiles() { |
|
||||||
String tmpDir = System.getProperty("java.io.tmpdir"); |
|
||||||
File dir = new File(tmpDir); |
|
||||||
File tmp = new File(dir, "apacheds_tmp"); |
|
||||||
if (tmp.exists()) { |
|
||||||
cleanupTempFiles(tmp); |
|
||||||
} else { |
|
||||||
tmp.mkdir(); |
|
||||||
} |
|
||||||
System.out.println("Directory temp files at: " + tmp.getAbsolutePath()); |
|
||||||
return tmp; |
|
||||||
} |
|
||||||
|
|
||||||
/** Attempts to open the file and import the contents as LDIF entries |
|
||||||
* into the test directory. |
|
||||||
* |
|
||||||
* @param file The LDIF file to import
|
|
||||||
* @throws IOException |
|
||||||
* @throws NamingException |
|
||||||
*/ |
|
||||||
// public void importLDIF(File file) throws IOException, NamingException {
|
|
||||||
// FileInputStream fis = new FileInputStream(file);
|
|
||||||
// importLDIF(fis);
|
|
||||||
// }
|
|
||||||
|
|
||||||
/** Attempts to read the provided InputStream for LDIF entries |
|
||||||
* and adds those entries to the test directory server. |
|
||||||
* |
|
||||||
* @param in InputStream of LDIF data. |
|
||||||
* @throws NamingException |
|
||||||
* @throws IOException |
|
||||||
*/ |
|
||||||
public void importLDIF(InputStream in) throws NamingException, IOException { |
|
||||||
LdifParser parser = new LdifParserImpl(); |
|
||||||
LdifIterator iterator = new LdifIterator( in ); |
|
||||||
|
|
||||||
while ( iterator.hasNext() ) { |
|
||||||
Attributes attributes = new LockableAttributesImpl(); |
|
||||||
String ldif = ( String ) iterator.next(); |
|
||||||
parser.parse( attributes, ldif ); |
|
||||||
Name dn = new LdapName( ( String ) attributes.remove( "dn" ).get() ); |
|
||||||
dn.remove( 0 ); |
|
||||||
serverContext.createSubcontext( dn, attributes ); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/** starts the apache directory server. */ |
|
||||||
protected void startServer() { |
|
||||||
System.out.println("Creating embedded LDAP server on port " + LDAP_PORT); |
|
||||||
MutableServerStartupConfiguration startup = new MutableServerStartupConfiguration(); |
|
||||||
|
|
||||||
startup.setWorkingDirectory(tempDirectory); |
|
||||||
startup.setLdapPort(LDAP_PORT); |
|
||||||
|
|
||||||
Hashtable env = startup.toJndiEnvironment(); |
|
||||||
env.putAll(getEnvironment()); |
|
||||||
env.put(Context.INITIAL_CONTEXT_FACTORY, ServerContextFactory.class.getName()); |
|
||||||
|
|
||||||
try { |
|
||||||
serverContext = new InitialDirContext( env ); |
|
||||||
} catch (NamingException nx) { |
|
||||||
nx.printStackTrace(); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Stops the apache directory server, and attempts to remove |
|
||||||
* the data files that the server creates. |
|
||||||
*/ |
|
||||||
protected void shutdownServer() { |
|
||||||
// close our internal instance of the server-context
|
|
||||||
LdapUtils.closeContext(serverContext); |
|
||||||
serverContext = null; |
|
||||||
|
|
||||||
// signal the server that its time to say goodbye
|
|
||||||
Hashtable env = new ShutdownConfiguration().toJndiEnvironment(); |
|
||||||
env.putAll(getEnvironment()); |
|
||||||
|
|
||||||
try { |
|
||||||
new InitialContext( env ); |
|
||||||
} catch (NamingException e) { |
|
||||||
e.printStackTrace(); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Utility method to remove any files in the temporary directory |
|
||||||
* that we use to store the directory server's data files. |
|
||||||
* |
|
||||||
* @param tempDir The temporary directory. |
|
||||||
*/ |
|
||||||
protected void cleanupTempFiles(File tempDir) { |
|
||||||
if ((null != tempDir) && (tempDir.exists())) { |
|
||||||
File[] files = tempDir.listFiles(); |
|
||||||
for (int i = 0; i < files.length; i++) { |
|
||||||
if (!files[i].delete()) { |
|
||||||
System.err.println("Error: unable to cleanup Apache Directory Server file: " + files[i]); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* This isn't working, probably because I am referencing the class
|
|
||||||
* as a static field, but maybe someone can figure out a way to |
|
||||||
* implement this correctly. |
|
||||||
*/ |
|
||||||
public void finalize() throws Throwable { |
|
||||||
System.out.println("Entering EmbeddedLdapServerController.finalize()"); |
|
||||||
shutdownServer(); |
|
||||||
cleanupTempFiles(tempDirectory); |
|
||||||
tempDirectory.delete(); |
|
||||||
super.finalize(); |
|
||||||
System.out.println("Leaving EmbeddedLdapServerController.finalize()"); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* @return The directory that the directory server will use to store its data files. |
|
||||||
*/ |
|
||||||
// public File getTempDirectory() {
|
|
||||||
// return tempDirectory;
|
|
||||||
// }
|
|
||||||
|
|
||||||
/** |
|
||||||
* @return The directory that the directory server will use to store its data files. |
|
||||||
*/ |
|
||||||
// public String getTempDirectoryPath() {
|
|
||||||
// return tempDirectory.getAbsolutePath();
|
|
||||||
// }
|
|
||||||
|
|
||||||
/** Create and return a Hashtable with standard JNDI settings for our tests. */ |
|
||||||
protected Properties getEnvironment() { |
|
||||||
Properties env = new Properties(); |
|
||||||
env.setProperty(Context.SECURITY_AUTHENTICATION, "simple"); |
|
||||||
env.setProperty(Context.SECURITY_PRINCIPAL, "uid=admin,ou=system"); |
|
||||||
env.setProperty(Context.SECURITY_CREDENTIALS,"secret"); |
|
||||||
// env.setProperty(Context.INITIAL_CONTEXT_FACTORY, CoreContextFactory.class.getName());
|
|
||||||
|
|
||||||
env.setProperty( Context.PROVIDER_URL, "ou=system" ); |
|
||||||
// env.put( EnvKeys.WKDIR, tempDirectory.getAbsolutePath() );
|
|
||||||
return env; |
|
||||||
} |
|
||||||
|
|
||||||
/** Get our reference to the server-mode context. */ |
|
||||||
public DirContext getServerContext() { |
|
||||||
return serverContext; |
|
||||||
} |
|
||||||
|
|
||||||
public static void main(String[] args) throws IOException { |
|
||||||
EmbeddedLdapServerController server = new EmbeddedLdapServerController(); |
|
||||||
System.out.println(DirectoryService.getInstance()); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
@ -1,123 +0,0 @@ |
|||||||
/* Copyright 2004, 2005 Acegi Technology Pty Limited |
|
||||||
* |
|
||||||
* Licensed 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. |
|
||||||
*/ |
|
||||||
package org.acegisecurity.providers.dao.ldap.support; |
|
||||||
|
|
||||||
import javax.naming.NamingException; |
|
||||||
import javax.naming.directory.Attributes; |
|
||||||
import javax.naming.directory.BasicAttributes; |
|
||||||
import javax.naming.directory.DirContext; |
|
||||||
|
|
||||||
/** Container for a bunch of methods begining with 'dirInit' and taking |
|
||||||
* a JNDI DirContext, which are used to construct the initial state |
|
||||||
* of the EmbeddedServer <b>before</b> Unit tests are run. |
|
||||||
* |
|
||||||
* @TODO Externalize this into a LDIF resource file(s); I would have done this, but |
|
||||||
* I can't seem to get this to work in both Eclipse and Maven at the same time. |
|
||||||
* |
|
||||||
* @author robert.sanders |
|
||||||
* |
|
||||||
*/ |
|
||||||
public class LdapDirInitializer { |
|
||||||
|
|
||||||
public static void intializeDir(DirContext ctx) throws NamingException { |
|
||||||
LdapDirInitializer ldi = new LdapDirInitializer(); |
|
||||||
|
|
||||||
ldi.dirInit_SimpleUidUser(ctx); |
|
||||||
|
|
||||||
ldi.dirInit_SimpleCnUser(ctx); |
|
||||||
|
|
||||||
ldi.dirInit_OuOthers(ctx); |
|
||||||
|
|
||||||
ldi.dirInit_UserNamedOtherOne(ctx); |
|
||||||
|
|
||||||
ldi.dirInit_UserNamedOtherTwo(ctx); |
|
||||||
} |
|
||||||
|
|
||||||
private void dirInit_SimpleUidUser(DirContext ctx) throws NamingException { |
|
||||||
String name = "uid=one.user,ou=users"; |
|
||||||
Attributes attrs = new BasicAttributes(); |
|
||||||
attrs.put("dn", name + ",ou=system"); |
|
||||||
attrs.put("cn", "User One"); |
|
||||||
attrs.put("sn", "One"); |
|
||||||
attrs.put("givenName", "User"); |
|
||||||
attrs.put("uid", "user.one"); |
|
||||||
attrs.put("mail", "one.user@hotmail.com"); |
|
||||||
attrs.put("userPassword", "plaintext"); |
|
||||||
attrs.put("objectClass", "inetOrgPerson"); |
|
||||||
attrs.put("objectClass", "top"); |
|
||||||
|
|
||||||
ctx.createSubcontext(name, attrs); |
|
||||||
} |
|
||||||
|
|
||||||
private void dirInit_SimpleCnUser(DirContext ctx) throws NamingException { |
|
||||||
String name = "cn=User Two,ou=users"; |
|
||||||
Attributes attrs = new BasicAttributes(); |
|
||||||
attrs.put("dn", name + ",ou=system"); |
|
||||||
attrs.put("cn", "Two User"); |
|
||||||
attrs.put("givenName", "Two"); |
|
||||||
attrs.put("sn", "User"); |
|
||||||
attrs.put("uid", "user.two"); |
|
||||||
attrs.put("mail", "user.two@hotmail.com"); |
|
||||||
attrs.put("userPassword", "plaintext2"); |
|
||||||
attrs.put("objectClass", "inetOrgPerson"); |
|
||||||
attrs.put("objectClass", "top"); |
|
||||||
|
|
||||||
ctx.createSubcontext(name, attrs); |
|
||||||
} |
|
||||||
|
|
||||||
private void dirInit_UserNamedOtherOne(DirContext ctx) throws NamingException { |
|
||||||
String name = "uid=other.one,ou=others"; |
|
||||||
Attributes attrs = new BasicAttributes(); |
|
||||||
attrs.put("dn", name + ",ou=system"); |
|
||||||
attrs.put("cn", "Other One"); |
|
||||||
attrs.put("givenName", "Other"); |
|
||||||
attrs.put("sn", "One"); |
|
||||||
attrs.put("uid", "other.one"); |
|
||||||
attrs.put("mail", "other.one@hotmail.com"); |
|
||||||
attrs.put("userPassword", "otherone"); |
|
||||||
attrs.put("objectClass", "inetOrgPerson"); |
|
||||||
attrs.put("objectClass", "top"); |
|
||||||
|
|
||||||
ctx.createSubcontext(name, attrs); |
|
||||||
} |
|
||||||
|
|
||||||
private void dirInit_UserNamedOtherTwo(DirContext ctx) throws NamingException { |
|
||||||
String name = "uid=other.two,ou=others"; |
|
||||||
Attributes attrs = new BasicAttributes(); |
|
||||||
attrs.put("dn", name + ",ou=system"); |
|
||||||
attrs.put("cn", "Other Two"); |
|
||||||
attrs.put("givenName", "Other"); |
|
||||||
attrs.put("sn", "Two"); |
|
||||||
attrs.put("uid", "other.two"); |
|
||||||
attrs.put("mail", "other.two@hotmail.com"); |
|
||||||
attrs.put("userPassword", "othertwo"); |
|
||||||
attrs.put("objectClass", "inetOrgPerson"); |
|
||||||
attrs.put("objectClass", "top"); |
|
||||||
|
|
||||||
ctx.createSubcontext(name, attrs); |
|
||||||
} |
|
||||||
|
|
||||||
private void dirInit_OuOthers(DirContext ctx) throws NamingException { |
|
||||||
String otherUserOU = "ou=Others"; |
|
||||||
Attributes attrs = new BasicAttributes(); |
|
||||||
attrs.put("dn", otherUserOU + ",ou=system"); |
|
||||||
attrs.put("ou", "others"); |
|
||||||
attrs.put("objectClass", "top"); |
|
||||||
attrs.put("objectClass", "organizationalUnit"); |
|
||||||
|
|
||||||
ctx.createSubcontext(otherUserOU, attrs); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
Loading…
Reference in new issue