[jboss-cvs] jboss-seam/examples/seamspace/src/org/jboss/seam/example/seamspace ...

Shane Bryzak Shane_Bryzak at symantec.com
Tue Jan 2 02:44:26 EST 2007


  User: sbryzak2
  Date: 07/01/02 02:44:26

  Modified:    examples/seamspace/src/org/jboss/seam/example/seamspace  
                        AuthenticatorAction.java LoginAction.java
  Log:
  updated with authentication changes
  
  Revision  Changes    Path
  1.4       +51 -33    jboss-seam/examples/seamspace/src/org/jboss/seam/example/seamspace/AuthenticatorAction.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: AuthenticatorAction.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/examples/seamspace/src/org/jboss/seam/example/seamspace/AuthenticatorAction.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -b -r1.3 -r1.4
  --- AuthenticatorAction.java	31 Dec 2006 01:26:42 -0000	1.3
  +++ AuthenticatorAction.java	2 Jan 2007 07:44:26 -0000	1.4
  @@ -1,67 +1,81 @@
   package org.jboss.seam.example.seamspace;
   
   import java.util.Map;
  +import java.util.Set;
   
  +import javax.naming.InitialContext;
   import javax.persistence.EntityManager;
  +import javax.persistence.EntityManagerFactory;
   import javax.persistence.NoResultException;
   import javax.security.auth.Subject;
   import javax.security.auth.callback.CallbackHandler;
   import javax.security.auth.login.LoginException;
   import javax.security.auth.spi.LoginModule;
   
  -import org.jboss.seam.annotations.In;
  -import org.jboss.seam.annotations.Name;
  +import org.jboss.seam.Seam;
  +import org.jboss.seam.contexts.Contexts;
   import org.jboss.seam.security.AuthenticationException;
  +import org.jboss.seam.security.Identity;
   import org.jboss.seam.security.Role;
  +import org.jboss.seam.security.UsernamePasswordToken;
   
   /**
    * Authenticates the member against the database
    *
    * @author Shane Bryzak
    */
  - at Name("authenticatorAction")
   public class AuthenticatorAction implements LoginModule
   {
      private Subject subject;
      
  -   @In(create=true)
  -       private EntityManager entityManager;   
  +   private UsernamePasswordToken token;
      
     public boolean abort() throws LoginException
      {
  -      // TODO Auto-generated method stub
  -      return false;
  +      return true;
      }
   
      public boolean commit() throws LoginException
      {
  -      // TODO Auto-generated method stub
  -      return false;
  +      Contexts.getSessionContext().set(Seam.getComponentName(Identity.class), 
  +            new UsernamePasswordToken(token.getName(), token.getCredentials(), 
  +                  token.getRoles()));
  +      return true;
      }
   
      public void initialize(Subject subject, CallbackHandler callbackHandler, 
            Map<String, ?> sharedState, Map<String, ?> options)
      {
         this.subject = subject;     
  +
  +      Set<UsernamePasswordToken> principals = subject.getPrincipals(UsernamePasswordToken.class);
  +      
  +      if (principals.isEmpty())
  +         throw new AuthenticationException("No principal found in subject");
  +      
  +      token = principals.iterator().next();   
      }
   
      public boolean login() throws LoginException
      {
  +      EntityManager entityManager = null;
         try
         {         
  -        Member member = (Member) entityManager.createQuery(
  +         InitialContext ctx = new InitialContext();
  +         EntityManagerFactory f = (EntityManagerFactory) ctx.lookup(
  +               "java:/seamspaceEntityManagerFactory");
  +         entityManager = f.createEntityManager();         
  +         
  +         Member member = (Member) entityManager
  +               .createQuery(
               "from Member where username = :username and password = :password")
  -//            .setParameter("username", auth.getPrincipal().toString())
  -//            .setParameter("password", auth.getCredentials())
  +               .setParameter("username", token.getPrincipal().toString())
  +               .setParameter("password", token.getCredentials())
               .getSingleResult();
   
  -        Role[] roles = new Role[member.getRoles().size()];
  -        int idx = 0;
           for (MemberRole mr : member.getRoles())
  -          roles[idx++] = new Role(mr.getName());
  +            subject.getPrincipals().add(new Role(mr.getName()));
           
  -//        return new UsernamePasswordToken(authentication.getPrincipal(),
  -//                                         authentication.getCredentials(), roles);
           return true;
         }
         catch (NoResultException ex)
  @@ -72,11 +86,15 @@
         {
           throw new AuthenticationException("Unknown authentication error", ex);
         }
  +      finally
  +      {
  +         if (entityManager != null)
  +            entityManager.close();
  +      }
      }
   
      public boolean logout() throws LoginException
      {
  -      // TODO Auto-generated method stub
  -      return false;
  +      return true;
      }
   }
  
  
  
  1.6       +10 -6     jboss-seam/examples/seamspace/src/org/jboss/seam/example/seamspace/LoginAction.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: LoginAction.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/examples/seamspace/src/org/jboss/seam/example/seamspace/LoginAction.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -b -r1.5 -r1.6
  --- LoginAction.java	22 Dec 2006 02:04:48 -0000	1.5
  +++ LoginAction.java	2 Jan 2007 07:44:26 -0000	1.6
  @@ -2,6 +2,8 @@
   
   import javax.ejb.Remove;
   import javax.ejb.Stateful;
  +import javax.security.auth.login.LoginContext;
  +import javax.security.auth.login.LoginException;
   
   import org.jboss.seam.ScopeType;
   import org.jboss.seam.Seam;
  @@ -12,8 +14,8 @@
   import org.jboss.seam.annotations.Scope;
   import org.jboss.seam.annotations.Synchronized;
   import org.jboss.seam.core.FacesMessages;
  -import org.jboss.seam.security.AuthenticationException;
  -import org.jboss.seam.security.authenticator.Authenticator;
  +import org.jboss.seam.security.SeamSecurityManager;
  +import org.jboss.seam.security.UsernamePasswordToken;
   
   /**
    * Login action
  @@ -36,11 +38,14 @@
      {
         try
         {
  -         Authenticator.instance().authenticate(member.getUsername(),
  -               member.getPassword());
  +         LoginContext lc = SeamSecurityManager.instance().createLoginContext();
  +         lc.getSubject().getPrincipals().add(new UsernamePasswordToken(
  +               member.getUsername(), member.getPassword()));
  +         lc.login();
  +         
            loggedIn = true;
         }
  -      catch (AuthenticationException ex)
  +      catch (LoginException ex)
         {
            FacesMessages.instance().add("Invalid login");
         }
  @@ -49,7 +54,6 @@
      public void logout() 
      {
         loggedIn = false;
  -      Authenticator.instance().unauthenticateSession();
         Seam.invalidateSession();
      }
   
  
  
  



More information about the jboss-cvs-commits mailing list