Cool stuff!

One request though: that the public getter/setter for 'roleSources'
does not expose or accept a concrete collection class and instead just
assumes a  java.util.Set - this way it can be more-easily configured
in IoC environments.

My .02,

Les

On Sat, Oct 16, 2010 at 10:24 AM,  <[email protected]> wrote:
> Author: adc
> Date: Sat Oct 16 17:24:16 2010
> New Revision: 1023335
>
> URL: http://svn.apache.org/viewvc?rev=1023335&view=rev
> Log:
> SHIRO-18 better constructors
>
> Modified:
>    
> shiro/sandbox/crowd/src/main/java/org/apache/shiro/realm/crowd/CrowdRealm.java
>    
> shiro/sandbox/crowd/src/test/java/org/apache/shiro/realm/crowd/CrowdRealmTest.java
>
> Modified: 
> shiro/sandbox/crowd/src/main/java/org/apache/shiro/realm/crowd/CrowdRealm.java
> URL: 
> http://svn.apache.org/viewvc/shiro/sandbox/crowd/src/main/java/org/apache/shiro/realm/crowd/CrowdRealm.java?rev=1023335&r1=1023334&r2=1023335&view=diff
> ==============================================================================
> --- 
> shiro/sandbox/crowd/src/main/java/org/apache/shiro/realm/crowd/CrowdRealm.java
>  (original)
> +++ 
> shiro/sandbox/crowd/src/main/java/org/apache/shiro/realm/crowd/CrowdRealm.java
>  Sat Oct 16 17:24:16 2010
> @@ -59,17 +59,35 @@ import org.apache.shiro.subject.Principa
>  public class CrowdRealm extends AuthorizingRealm {
>
>     private static final Logger LOG = 
> LoggerFactory.getLogger(CrowdRealm.class);
> -    private SecurityServerClient crowdClient = 
> SecurityServerClientFactory.getSecurityServerClient();
> +    private final SecurityServerClient crowdClient;
>     private EnumSet<RoleSource> roleSources = 
> EnumSet.of(RoleSource.ROLES_FROM_CROWD_ROLES);
>
>     /**
> -     * Override the default mechanism of obtaining a Crowd client from a
> -     * <code>SecurityServerClientFactory</code>.
> +     * Initialize the Shiro Crowd realm with an instance of
> +     * {...@link SecurityServerClient} generated by the factory
> +     * {...@link SecurityServerClientFactory}.  The method
> +     * {...@link SecurityServerClient#authenticate} is called by this
> +     * constructor.
>      *
> -     * @param crowdClient the crowd client to be used by the realm.
> -     * @see SecurityServerClientFactory
> +     * @throws InvalidAuthorizationTokenException
> +     *                         if the credentials in the 
> <code>crowd.properties</code> are not correct
> +     * @throws RemoteException if the client cannot reach the Crowd server
>      */
> -    public void setCrowdClient(SecurityServerClient crowdClient) {
> +    public CrowdRealm() throws InvalidAuthorizationTokenException, 
> RemoteException {
> +        crowdClient = SecurityServerClientFactory.getSecurityServerClient();
> +        crowdClient.authenticate();
> +    }
> +
> +    /**
> +     * Initialize the Shiro Crowd realm with an instance of
> +     * {...@link SecurityServerClient}.  The method {...@link 
> SecurityServerClient#authenticate}
> +     * is assumed to be called by the creator of this realm.
> +     *
> +     * @param crowdClient an instance of {...@link SecurityServerClient} to 
> be used when communicating with the Crowd server
> +     */
> +    public CrowdRealm(SecurityServerClient crowdClient) {
> +        if (crowdClient == null) throw new IllegalArgumentException("Crowd 
> client cannot be null");
> +
>         this.crowdClient = crowdClient;
>     }
>
>
> Modified: 
> shiro/sandbox/crowd/src/test/java/org/apache/shiro/realm/crowd/CrowdRealmTest.java
> URL: 
> http://svn.apache.org/viewvc/shiro/sandbox/crowd/src/test/java/org/apache/shiro/realm/crowd/CrowdRealmTest.java?rev=1023335&r1=1023334&r2=1023335&view=diff
> ==============================================================================
> --- 
> shiro/sandbox/crowd/src/test/java/org/apache/shiro/realm/crowd/CrowdRealmTest.java
>  (original)
> +++ 
> shiro/sandbox/crowd/src/test/java/org/apache/shiro/realm/crowd/CrowdRealmTest.java
>  Sat Oct 16 17:24:16 2010
> @@ -22,7 +22,6 @@ import java.util.Arrays;
>  import java.util.EnumSet;
>
>  import 
> com.atlassian.crowd.integration.service.soap.client.SecurityServerClient;
> -import 
> com.atlassian.crowd.integration.service.soap.client.SecurityServerClientFactory;
>  import org.junit.Test;
>  import static org.easymock.EasyMock.*;
>  import static org.junit.Assert.*;
> @@ -41,14 +40,12 @@ public class CrowdRealmTest {
>     @Test
>     public void testAuthentication() throws Exception {
>
> -        CrowdRealm realm = new CrowdRealm();
> -        realm.setName("NutHouse");
> -
>         SecurityServerClient client = 
> createStrictMock(SecurityServerClient.class);
>         expect(client.authenticatePrincipalSimple("yoko", 
> "barbie")).andReturn("UNUSED");
>         replay(client);
>
> -        realm.setCrowdClient(client);
> +        CrowdRealm realm = new CrowdRealm(client);
> +        realm.setName("NutHouse");
>
>         AuthenticationInfo authenticationInfo = 
> realm.doGetAuthenticationInfo(new UsernamePasswordToken("yoko", "barbie"));
>
> @@ -69,15 +66,13 @@ public class CrowdRealmTest {
>     @Test
>     public void testDefaultRoles() throws Exception {
>
> -        CrowdRealm realm = new CrowdRealm();
> -        realm.setName("NutHouse");
> -
>         SecurityServerClient client = 
> createStrictMock(SecurityServerClient.class);
>         expect(client.authenticatePrincipalSimple("yoko", 
> "barbie")).andReturn("UNUSED");
>         expect(client.findRoleMemberships("yoko")).andReturn(new 
> String[]{"big_sister", "table_setter", "dog_walker"});
>         replay(client);
>
> -        realm.setCrowdClient(client);
> +        CrowdRealm realm = new CrowdRealm(client);
> +        realm.setName("NutHouse");
>
>         AuthenticationInfo authenticationInfo = 
> realm.doGetAuthenticationInfo(new UsernamePasswordToken("yoko", "barbie"));
>         AuthorizationInfo authorizationInfo = 
> realm.doGetAuthorizationInfo(authenticationInfo.getPrincipals());
> @@ -92,16 +87,14 @@ public class CrowdRealmTest {
>     @Test
>     public void testRoleMemberships() throws Exception {
>
> -        CrowdRealm realm = new CrowdRealm();
> -        realm.setName("NutHouse");
> -        realm.setRoleSources(EnumSet.of(RoleSource.ROLES_FROM_CROWD_ROLES));
> -
>         SecurityServerClient client = 
> createStrictMock(SecurityServerClient.class);
>         expect(client.authenticatePrincipalSimple("yoko", 
> "barbie")).andReturn("UNUSED");
>         expect(client.findRoleMemberships("yoko")).andReturn(new 
> String[]{"big_sister", "table_setter", "dog_walker"});
>         replay(client);
>
> -        realm.setCrowdClient(client);
> +        CrowdRealm realm = new CrowdRealm(client);
> +        realm.setName("NutHouse");
> +        realm.setRoleSources(EnumSet.of(RoleSource.ROLES_FROM_CROWD_ROLES));
>
>         AuthenticationInfo authenticationInfo = 
> realm.doGetAuthenticationInfo(new UsernamePasswordToken("yoko", "barbie"));
>         AuthorizationInfo authorizationInfo = 
> realm.doGetAuthorizationInfo(authenticationInfo.getPrincipals());
> @@ -117,16 +110,14 @@ public class CrowdRealmTest {
>     @Test
>     public void testGroupMemberships() throws Exception {
>
> -        CrowdRealm realm = new CrowdRealm();
> -        realm.setName("NutHouse");
> -        realm.setRoleSources(EnumSet.of(RoleSource.ROLES_FROM_CROWD_GROUPS));
> -
>         SecurityServerClient client = 
> createStrictMock(SecurityServerClient.class);
>         expect(client.authenticatePrincipalSimple("yoko", 
> "barbie")).andReturn("UNUSED");
>         expect(client.findGroupMemberships("yoko")).andReturn(new 
> String[]{"girls", "naughty"});
>         replay(client);
>
> -        realm.setCrowdClient(client);
> +        CrowdRealm realm = new CrowdRealm(client);
> +        realm.setName("NutHouse");
> +        realm.setRoleSources(EnumSet.of(RoleSource.ROLES_FROM_CROWD_GROUPS));
>
>         AuthenticationInfo authenticationInfo = 
> realm.doGetAuthenticationInfo(new UsernamePasswordToken("yoko", "barbie"));
>         AuthorizationInfo authorizationInfo = 
> realm.doGetAuthorizationInfo(authenticationInfo.getPrincipals());
> @@ -140,17 +131,15 @@ public class CrowdRealmTest {
>     @Test
>     public void testAll() throws Exception {
>
> -        CrowdRealm realm = new CrowdRealm();
> -        realm.setName("NutHouse");
> -        realm.setRoleSources(EnumSet.of(RoleSource.ROLES_FROM_CROWD_GROUPS, 
> RoleSource.ROLES_FROM_CROWD_ROLES));
> -
>         SecurityServerClient client = 
> createStrictMock(SecurityServerClient.class);
>         expect(client.authenticatePrincipalSimple("yoko", 
> "barbie")).andReturn("UNUSED");
>         expect(client.findRoleMemberships("yoko")).andReturn(new 
> String[]{"big_sister", "table_setter", "dog_walker"});
>         expect(client.findGroupMemberships("yoko")).andReturn(new 
> String[]{"girls", "naughty"});
>         replay(client);
>
> -        realm.setCrowdClient(client);
> +        CrowdRealm realm = new CrowdRealm(client);
> +        realm.setName("NutHouse");
> +        realm.setRoleSources(EnumSet.of(RoleSource.ROLES_FROM_CROWD_GROUPS, 
> RoleSource.ROLES_FROM_CROWD_ROLES));
>
>         AuthenticationInfo authenticationInfo = 
> realm.doGetAuthenticationInfo(new UsernamePasswordToken("yoko", "barbie"));
>         AuthorizationInfo authorizationInfo = 
> realm.doGetAuthorizationInfo(authenticationInfo.getPrincipals());
> @@ -164,16 +153,13 @@ public class CrowdRealmTest {
>         assertTrue(authorizationInfo.getRoles().contains("naughty"));
>     }
>
> +   �...@test
>     public void testIntegration() throws Exception {
> +
>         CrowdRealm realm = new CrowdRealm();
>         realm.setName("NutHouse");
>         realm.setRoleSources(EnumSet.of(RoleSource.ROLES_FROM_CROWD_GROUPS, 
> RoleSource.ROLES_FROM_CROWD_ROLES));
>
> -        SecurityServerClient client = 
> SecurityServerClientFactory.getSecurityServerClient();
> -        client.authenticate();
> -
> -        realm.setCrowdClient(client);
> -
>         AuthenticationInfo authenticationInfo = 
> realm.doGetAuthenticationInfo(new UsernamePasswordToken("yoko", "barbie"));
>
>         assertNotNull(authenticationInfo);
>
>

Reply via email to