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

Shane Bryzak Shane_Bryzak at symantec.com
Mon Jan 8 07:48:00 EST 2007


  User: sbryzak2
  Date: 07/01/08 07:48:00

  Added:       src/main/org/jboss/seam/security/spi  SeamLoginModule.java
  Log:
  finished JAAS authentication changes
  
  Revision  Changes    Path
  1.1      date: 2007/01/08 12:48:00;  author: sbryzak2;  state: Exp;jboss-seam/src/main/org/jboss/seam/security/spi/SeamLoginModule.java
  
  Index: SeamLoginModule.java
  ===================================================================
  package org.jboss.seam.security.spi;
  
  import java.security.acl.Group;
  import java.util.HashSet;
  import java.util.Map;
  import java.util.Set;
  
  import javax.security.auth.Subject;
  import javax.security.auth.callback.Callback;
  import javax.security.auth.callback.CallbackHandler;
  import javax.security.auth.callback.NameCallback;
  import javax.security.auth.callback.PasswordCallback;
  import javax.security.auth.login.LoginException;
  import javax.security.auth.spi.LoginModule;
  
  import org.jboss.seam.core.Expressions;
  import org.jboss.seam.core.Expressions.MethodBinding;
  import org.jboss.seam.log.LogProvider;
  import org.jboss.seam.log.Logging;
  import org.jboss.seam.security.SimpleGroup;
  import org.jboss.seam.security.SimplePrincipal;
  
  /**
   * Performs authentication using a Seam component
   * 
   * @author Shane Bryzak
   */
  public class SeamLoginModule implements LoginModule
  {
     private static final String OPTS_LOGIN_METHOD = "loginMethod";
     
     private static final LogProvider log = Logging.getLogProvider(SeamLoginModule.class);   
     
     private Set<String> roles = new HashSet<String>();
     private Subject subject;
     private Map<String,?> options;
     private CallbackHandler callbackHandler;
     
     private String username;
     
     public boolean abort() throws LoginException
     {
        return true;
     }
  
     public boolean commit() throws LoginException
     {        
        subject.getPrincipals().add(new SimplePrincipal(username));
        
        Group roleGroup = new SimpleGroup("roles");
        for (String role : roles)
        {
           roleGroup.addMember(new SimplePrincipal(role));
        }
        
        subject.getPrincipals().add(roleGroup);
        
        return true;
     }
  
     public void initialize(Subject subject, CallbackHandler callbackHandler,
           Map<String, ?> sharedState, Map<String, ?> options)
     {
        this.subject = subject;
        this.options = options;
        this.callbackHandler = callbackHandler;
     }
  
     public boolean login() 
        throws LoginException
     {
        MethodBinding mb = Expressions.instance().createMethodBinding(
              (String) options.get(OPTS_LOGIN_METHOD));
        
        Object[] params = null;
        
        try
        {
           params = getLoginParams();
        }
        catch (Exception e)
        {         
           log.error("Error logging in", e);         
           throw new LoginException(e.getMessage());
        }
        
        try
        {
          return (Boolean) mb.invoke(getLoginParamTypes(), params);      
        }
        catch (RuntimeException ex)
        {
           log.error("Error invoking login method", ex);
           return false;
        }
     }
     
     public Class[] getLoginParamTypes()
     {
        return new Class[] {String.class, String.class, Set.class };
     }
     
     /**
      * Override this method if this isn't a standard username/password-based
      * authentication.
      * 
      * @return
      * @throws Exception
      */
     public Object[] getLoginParams()
        throws Exception
     {
        NameCallback cbName = new NameCallback("Enter username");
        PasswordCallback cbPassword = new PasswordCallback("Enter password", false);
  
        // Get the username and password from the callback handler
        callbackHandler.handle(new Callback[] { cbName, cbPassword });
        username = cbName.getName();
        
        return new Object[] { username, new String(cbPassword.getPassword()), 
              roles };
     }
  
     public boolean logout() throws LoginException
     {
        
        return true;
     }
  }
  
  
  



More information about the jboss-cvs-commits mailing list