[seam-commits] Seam SVN: r10740 - in examples/trunk/booking: ejb-jar/src/main/java/org/jboss/seam/examples/booking/security and 3 other directories.

seam-commits at lists.jboss.org seam-commits at lists.jboss.org
Fri May 1 14:41:57 EDT 2009


Author: dan.j.allen
Date: 2009-05-01 14:41:56 -0400 (Fri, 01 May 2009)
New Revision: 10740

Added:
   examples/trunk/booking/ejb-jar/src/main/java/org/jboss/seam/examples/booking/security/Authenticator.java
   examples/trunk/booking/ejb-jar/src/main/java/org/jboss/seam/examples/booking/security/AuthenticatorBean.java
   examples/trunk/booking/ejb-jar/src/main/java/org/jboss/seam/examples/booking/security/Credentials.java
Modified:
   examples/trunk/booking/ejb-jar/src/main/java/org/jboss/seam/examples/booking/security/Identity.java
   examples/trunk/booking/ejb-jar/src/main/java/org/jboss/seam/examples/booking/session/RegistrarBean.java
   examples/trunk/booking/ejb-jar/src/main/resources/import.sql
   examples/trunk/booking/readme.txt
   examples/trunk/booking/war/src/main/webapp/home.xhtml
   examples/trunk/booking/war/src/main/webapp/register.xhtml
Log:
use real authenticator to login
further emulate Seam Security API so it is quick to integrate
note about Bean Validation


Added: examples/trunk/booking/ejb-jar/src/main/java/org/jboss/seam/examples/booking/security/Authenticator.java
===================================================================
--- examples/trunk/booking/ejb-jar/src/main/java/org/jboss/seam/examples/booking/security/Authenticator.java	                        (rev 0)
+++ examples/trunk/booking/ejb-jar/src/main/java/org/jboss/seam/examples/booking/security/Authenticator.java	2009-05-01 18:41:56 UTC (rev 10740)
@@ -0,0 +1,15 @@
+package org.jboss.seam.examples.booking.security;
+
+import javax.ejb.Local;
+
+/**
+ * <strong>Authenticator</strong> is responsible for authenticating
+ * the current user.
+ *
+ * @author Dan Allen
+ */
+public
+ at Local
+interface Authenticator {
+   boolean authenticate();
+}

Added: examples/trunk/booking/ejb-jar/src/main/java/org/jboss/seam/examples/booking/security/AuthenticatorBean.java
===================================================================
--- examples/trunk/booking/ejb-jar/src/main/java/org/jboss/seam/examples/booking/security/AuthenticatorBean.java	                        (rev 0)
+++ examples/trunk/booking/ejb-jar/src/main/java/org/jboss/seam/examples/booking/security/AuthenticatorBean.java	2009-05-01 18:41:56 UTC (rev 10740)
@@ -0,0 +1,38 @@
+package org.jboss.seam.examples.booking.security;
+
+import javax.ejb.Stateless;
+import javax.inject.Current;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import org.jboss.seam.examples.booking.model.User;
+
+/**
+ * This implementation of <strong>Authenticator</strong>
+ * cross references the values of the user's credentials
+ * against the database.
+ *
+ * @author Dan Allen
+ */
+public
+ at Stateless
+class AuthenticatorBean implements Authenticator
+{
+   @PersistenceContext EntityManager em;
+
+   @Current Credentials credentials;
+
+   public boolean authenticate()
+   {
+      if (credentials.getUsername() != null && credentials.getUsername().length() > 0)
+      {
+         User user = em.find(User.class, credentials.getUsername());
+         if (user != null && user.getPassword().equals(credentials.getPassword()))
+         {
+            credentials.setPassword(null);
+            return true;
+         }
+      }
+
+      return false;
+   }
+}

Added: examples/trunk/booking/ejb-jar/src/main/java/org/jboss/seam/examples/booking/security/Credentials.java
===================================================================
--- examples/trunk/booking/ejb-jar/src/main/java/org/jboss/seam/examples/booking/security/Credentials.java	                        (rev 0)
+++ examples/trunk/booking/ejb-jar/src/main/java/org/jboss/seam/examples/booking/security/Credentials.java	2009-05-01 18:41:56 UTC (rev 10740)
@@ -0,0 +1,47 @@
+package org.jboss.seam.examples.booking.security;
+
+import java.io.Serializable;
+import javax.annotation.Named;
+import javax.context.SessionScoped;
+
+/**
+ * Holds the user's credentials.
+ *
+ * @author Dan Allen
+ */
+public
+ at Named
+ at SessionScoped
+class Credentials implements Serializable
+{
+   private String username;
+
+   private String password;
+
+   public String getPassword()
+   {
+      return password;
+   }
+
+   public void setPassword(String password)
+   {
+      this.password = password;
+   }
+
+   public String getUsername()
+   {
+      return username;
+   }
+
+   public void setUsername(String username)
+   {
+      this.username = username;
+   }
+
+   public void clear()
+   {
+      this.username = null;
+      this.password = null;
+   }
+
+}

Modified: examples/trunk/booking/ejb-jar/src/main/java/org/jboss/seam/examples/booking/security/Identity.java
===================================================================
--- examples/trunk/booking/ejb-jar/src/main/java/org/jboss/seam/examples/booking/security/Identity.java	2009-05-01 08:28:37 UTC (rev 10739)
+++ examples/trunk/booking/ejb-jar/src/main/java/org/jboss/seam/examples/booking/security/Identity.java	2009-05-01 18:41:56 UTC (rev 10740)
@@ -4,7 +4,8 @@
 import javax.annotation.Named;
 import javax.context.SessionScoped;
 import javax.faces.context.FacesContext;
-import javax.inject.manager.Manager;
+import javax.inject.Current;
+import javax.inject.Initializer;
 
 /**
  * @author Dan Allen
@@ -14,59 +15,50 @@
 @SessionScoped
 class Identity implements Serializable
 {
-   private String username;
+   @Current Authenticator authenticator;
 
-   private String password;
+   private Credentials credentials;
 
    private boolean loggedIn;
 
-   public boolean isLoggedIn()
+   public Identity() {}
+   
+   public @Initializer Identity(Credentials credentials)
    {
-      return loggedIn;
+      this.credentials = credentials;
    }
 
-   public void setLoggedIn(boolean loggedIn)
-   {
-      this.loggedIn = loggedIn;
-   }
 
-   public String getPassword()
+   public boolean isLoggedIn()
    {
-      return password;
+      return loggedIn;
    }
 
-   public void setPassword(String password)
-   {
-      this.password = password;
-   }
-
    public String getUsername()
    {
-      return username;
+      return credentials.getUsername();
    }
 
-   public void setUsername(String username)
+   public void autoLogin()
    {
-      this.username = username;
+      loggedIn = true;
    }
 
-   public boolean login()
+   public void login()
    {
-      if (username != null && username.length() > 0)
+      if (authenticator.authenticate())
       {
-         password = null;
          loggedIn = true;
-         return true;
+         // authenticationEvent.fire(new AuthenticationEvent(credentials), new AnnotationLiteral<Success>() {});
+         return;
       }
 
-      return false;
+      // authenticationEvent.fire(new AuthenticationEvent(credentials), new AnnotationLiteral<Failed>() {});
    }
 
-   Manager manager;
-
    public void logout()
    {
-      username = null;
+      credentials.clear();
       loggedIn = false;
       // FIXME this is a dirty hack to reset a producer
       FacesContext.getCurrentInstance().getExternalContext().invalidateSession();

Modified: examples/trunk/booking/ejb-jar/src/main/java/org/jboss/seam/examples/booking/session/RegistrarBean.java
===================================================================
--- examples/trunk/booking/ejb-jar/src/main/java/org/jboss/seam/examples/booking/session/RegistrarBean.java	2009-05-01 08:28:37 UTC (rev 10739)
+++ examples/trunk/booking/ejb-jar/src/main/java/org/jboss/seam/examples/booking/session/RegistrarBean.java	2009-05-01 18:41:56 UTC (rev 10740)
@@ -9,6 +9,7 @@
 import javax.persistence.EntityManager;
 import javax.persistence.PersistenceContext;
 import org.jboss.seam.examples.booking.model.User;
+import org.jboss.seam.examples.booking.security.Credentials;
 import org.jboss.seam.examples.booking.security.Identity;
 import org.jboss.seam.international.StatusMessage;
 import org.jboss.seam.international.StatusMessages;
@@ -29,6 +30,8 @@
 
    @Current RegistrationFormControls formControls;
 
+   @Current Credentials credentials;
+
    @Current Identity identity;
 
    private User newUser;
@@ -44,8 +47,8 @@
       if (verifyPasswordsMatch() && verifyUsernameIsAvailable())
       {
          em.persist(newUser);
-         identity.setUsername(newUser.getUsername());
-         identity.login();
+         credentials.setUsername(newUser.getUsername());
+         identity.autoLogin();
          registered = true;
          statusMessages.add("You have been successfully registered as the user {0}!", newUser.getUsername());
       }

Modified: examples/trunk/booking/ejb-jar/src/main/resources/import.sql
===================================================================
--- examples/trunk/booking/ejb-jar/src/main/resources/import.sql	2009-05-01 08:28:37 UTC (rev 10739)
+++ examples/trunk/booking/ejb-jar/src/main/resources/import.sql	2009-05-01 18:41:56 UTC (rev 10740)
@@ -1,7 +1,7 @@
 insert into Customer (username, password, name) values ('gavin', 'mexico', 'Gavin King')
 insert into Customer (username, password, name) values ('pete', 'edinburgh', 'Pete Muir')
 insert into Customer (username, password, name) values ('shane', 'brisbane', 'Shane Bryzak')
-insert into Customer (username, password, name) values ('dan', 'maryland', 'Dan Allen')
+insert into Customer (username, password, name) values ('dan', 'laurel', 'Dan Allen')
 insert into Hotel (id, price, name, address, city, state, zip, country) values (1, 120, 'Marriott Courtyard', 'Tower Place, Buckhead', 'Atlanta', 'GA', '30305', 'USA')
 insert into Hotel (id, price, name, address, city, state, zip, country) values (2, 180, 'Doubletree', 'Tower Place, Buckhead', 'Atlanta', 'GA', '30305', 'USA')
 insert into Hotel (id, price, name, address, city, state, zip, country) values (3, 450, 'W Hotel', 'Union Square, Manhattan', 'NY', 'NY', '10011', 'USA')

Modified: examples/trunk/booking/readme.txt
===================================================================
--- examples/trunk/booking/readme.txt	2009-05-01 08:28:37 UTC (rev 10739)
+++ examples/trunk/booking/readme.txt	2009-05-01 18:41:56 UTC (rev 10740)
@@ -5,12 +5,15 @@
 Java EE 5 environment enhanced with JSR-299 [Web Beans] and JSF 2.0).
 Contextual state management and dependency injection are handled by JSR-299.
 Transaction and persistence context management is handled by the EJB 3
-container.
+container. Validation of input fields is handled by Bean Validation.
 
 Please consult the Web Beans reference documentation for instructions on how to
 deploy the Web Bean implementation to JBoss AS 5. To upgrade the JSF libraries
 to JSF 2.0, go to the Seam jsf-updater-tool module and follow the instructions
-there.
+there. You will also need to have Bean Validation installed in the container
+(or added to the classpath) in order for UI validation to work. Installing Bean
+Validation is as simple as putting the JARs in the library directory of the
+application server.
 
 This example uses a Maven 2 build. To build the EJB and WAR and package them
 inside an EAR, execute the following command:

Modified: examples/trunk/booking/war/src/main/webapp/home.xhtml
===================================================================
--- examples/trunk/booking/war/src/main/webapp/home.xhtml	2009-05-01 08:28:37 UTC (rev 10739)
+++ examples/trunk/booking/war/src/main/webapp/home.xhtml	2009-05-01 18:41:56 UTC (rev 10740)
@@ -43,12 +43,12 @@
          <fieldset>
             <div>
                <h:outputLabel for="username" value="Login name"/>
-               <h:inputText id="username" value="#{identity.username}" style="width: 175px;"/>
+               <h:inputText id="username" value="#{credentials.username}" style="width: 175px;"/>
                <div class="errors"><h:message for="username"/></div>
             </div>
             <div>
                <h:outputLabel for="password" value="Password"/>
-               <h:inputSecret id="password" value="#{identity.password}" style="width: 175px;"/>
+               <h:inputSecret id="password" value="#{credentials.password}" style="width: 175px;"/>
             </div>
             <div class="errors"><h:messages id="messages" globalOnly="true"/></div>
             <div class="buttonBox"><h:commandButton id="login" action="#{identity.login}" value="Account Login"/></div>
@@ -59,7 +59,7 @@
                   <li>gavin/mexico</li>
                   <li>pete/edinburgh</li>
                   <li>shane/brisbane</li>
-                  <li>dan/maryland</li>
+                  <li>dan/laurel</li>
                </ul>
             </div>
          </fieldset>

Modified: examples/trunk/booking/war/src/main/webapp/register.xhtml
===================================================================
--- examples/trunk/booking/war/src/main/webapp/register.xhtml	2009-05-01 08:28:37 UTC (rev 10739)
+++ examples/trunk/booking/war/src/main/webapp/register.xhtml	2009-05-01 18:41:56 UTC (rev 10740)
@@ -25,7 +25,7 @@
             <h:messages id="messages" globalOnly="true"/>
          </div>
 
-         <h:form id="registrationForm">
+         <h:form id="registrationForm" prependId="false">
 
             <fieldset>
          




More information about the seam-commits mailing list