[jboss-cvs] jboss-seam/src/main/org/jboss/seam/security/authenticator ...

Shane Bryzak Shane_Bryzak at symantec.com
Sat Dec 30 09:04:03 EST 2006


  User: sbryzak2
  Date: 06/12/30 09:04:03

  Modified:    src/main/org/jboss/seam/security/authenticator 
                        ProviderAuthenticator.java
  Log:
  configuration support for provider flags
  
  Revision  Changes    Path
  1.12      +105 -56   jboss-seam/src/main/org/jboss/seam/security/authenticator/ProviderAuthenticator.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: ProviderAuthenticator.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/security/authenticator/ProviderAuthenticator.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -b -r1.11 -r1.12
  --- ProviderAuthenticator.java	4 Dec 2006 01:21:52 -0000	1.11
  +++ ProviderAuthenticator.java	30 Dec 2006 14:04:03 -0000	1.12
  @@ -10,8 +10,8 @@
   import org.jboss.seam.annotations.Install;
   import org.jboss.seam.annotations.Name;
   import org.jboss.seam.annotations.Scope;
  -import org.jboss.seam.security.Identity;
   import org.jboss.seam.security.AuthenticationException;
  +import org.jboss.seam.security.Identity;
   import org.jboss.seam.security.provider.AuthenticationProvider;
   import org.jboss.seam.util.Reflections;
   
  @@ -22,10 +22,33 @@
    */
   @Name("org.jboss.seam.security.authenticator")
   @Scope(APPLICATION)
  - at Install(value=false, precedence=BUILT_IN)
  + at Install(value = false, precedence = BUILT_IN)
   public class ProviderAuthenticator extends Authenticator
   {
  -  private List<Object> providers = new ArrayList<Object> ();
  +   /**
  +    * These constants are semantically equivalent to the JAAS login module flags
  +    * documented in javax.security.auth.login.Configuration
  +    */
  +   public enum Flag
  +   {
  +      required, requisite, sufficient, optional
  +   };
  +   
  +   private String flags;
  +   
  +   private class ProviderEntry 
  +   {      
  +      public Object provider;
  +      public Flag flag;
  +      
  +      public ProviderEntry(Object provider, Flag flag)
  +      {
  +         this.provider = provider;
  +         this.flag = flag;
  +      }
  +   }
  +
  +   private List<ProviderEntry> providers = new ArrayList<ProviderEntry>();
   
     /**
      *
  @@ -37,14 +60,16 @@
     public Identity doAuthentication(Identity authentication)
         throws AuthenticationException
     {
  -    for (Object p : providers)
  +      for (ProviderEntry entry : providers)
       {
         AuthenticationProvider provider = null;
   
  -      if (p instanceof AuthenticationProvider)
  -        provider = (AuthenticationProvider) p;
  -      else if (p instanceof Component)
  -        provider = (AuthenticationProvider) ( (Component) p).newInstance();
  +         /** todo implement flag logic */
  +         
  +         if (entry.provider instanceof AuthenticationProvider)
  +            provider = (AuthenticationProvider) entry.provider;
  +         else if (entry.provider instanceof Component)
  +            provider = (AuthenticationProvider) ((Component) entry.provider).newInstance();
   
         Identity result = provider.authenticate(authentication);
         if (result != null)
  @@ -54,31 +79,55 @@
       throw new AuthenticationException("Provider not found");
     }
   
  +   public void setFlags(String flags)
  +   {
  +     this.flags = flags;
  +     
  +     if (!providers.isEmpty())
  +        checkFlags();
  +   }
  +   
  +   private void checkFlags()
  +   {
  +      if (flags != null)
  +      {
  +         String[] parts = flags.split("[,]");
  +         
  +         for (int i = 0; i < Math.min(parts.length, providers.size()); i++)
  +         {
  +            providers.get(i).flag = Flag.valueOf(parts[i]);
  +         }
  +      }
  +   }
  +
     public void setProviders(Object values)
     {
       if (values instanceof AuthenticationProvider)
       {
  -      providers.add(values);
  +         providers.add(new ProviderEntry(values, Flag.required));
       }
       else
       {
         for (Object provider : (List) values)
         {
           if (provider instanceof Component)
  -          providers.add(provider);
  +               providers.add(new ProviderEntry(provider, Flag.required));
           else
           {
             try
             {
  -            provider = Reflections.classForName(provider.toString()).newInstance();
  -            providers.add(provider);
  +                  provider = Reflections.classForName(provider.toString())
  +                        .newInstance();
  +                  providers.add(new ProviderEntry(provider, Flag.required));
             }
             catch (Exception ex)
             {
  -//        log.error("Error creating provider", ex);
  +                  //        log.error("Error creating provider", ex);
             }
           }
         }
       }
  +      
  +      checkFlags();
     }
   }
  
  
  



More information about the jboss-cvs-commits mailing list