Skip to content

Commit

Permalink
Works on GlassFish
Browse files Browse the repository at this point in the history
  • Loading branch information
agoncal committed Aug 23, 2015
1 parent 7253e5c commit c2cd75c
Show file tree
Hide file tree
Showing 9 changed files with 106 additions and 15 deletions.
Expand Up @@ -15,9 +15,13 @@
*/

@Entity
@Table(name = "T_USER", uniqueConstraints = {
@UniqueConstraint(columnNames = { "login" })
})
@NamedQueries({
@NamedQuery(name = User.FIND_BY_EMAIL, query = "SELECT u FROM User u WHERE u.email = :email"),
@NamedQuery(name = User.FIND_BY_UUID, query = "SELECT u FROM User u WHERE u.uuid = :uuid"),
@NamedQuery(name = User.FIND_BY_LOGIN, query = "SELECT u FROM User u WHERE u.login = :login"),
@NamedQuery(name = User.FIND_BY_LOGIN_PASSWORD, query = "SELECT u FROM User u WHERE u.login = :login AND u.password = :password"),
@NamedQuery(name = User.FIND_ALL, query = "SELECT u FROM User u")
})
Expand Down Expand Up @@ -67,6 +71,7 @@ public class User implements Serializable
// ======================================

public static final String FIND_BY_EMAIL = "User.findByEmail";
public static final String FIND_BY_LOGIN = "User.findByLogin";
public static final String FIND_BY_UUID = "User.findByUUID";
public static final String FIND_BY_LOGIN_PASSWORD = "User.findByLoginAndPassword";
public static final String FIND_ALL = "User.findAll";
Expand Down Expand Up @@ -190,11 +195,13 @@ public void setRole(UserRole role)
this.role = role;
}

public String getUuid() {
public String getUuid()
{
return uuid;
}

public void setUuid(String uuid) {
public void setUuid(String uuid)
{
this.uuid = uuid;
}

Expand Down
@@ -0,0 +1,23 @@
package org.agoncal.sample.jsf.login.utils;

import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import javax.interceptor.InterceptorBinding;

/**
* @author Antonio Goncalves
* http://www.antoniogoncalves.org
* --
* Any JSF backing bean using this interceptor binding will catch and display exceptions on the JSF page
*/

@InterceptorBinding
@Target({METHOD, TYPE})
@Retention(RUNTIME)
public @interface CatchException {
}
@@ -0,0 +1,41 @@
package org.agoncal.sample.jsf.login.utils;

import static javax.faces.application.FacesMessage.SEVERITY_ERROR;

import java.io.Serializable;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.interceptor.AroundInvoke;
import javax.interceptor.Interceptor;
import javax.interceptor.InvocationContext;

/**
* @author Antonio Goncalves - http://www.antoniogoncalves.org
*
* This interceptor catches exception and displayes them in a JSF page
*/

@Interceptor
@CatchException
public class CatchExceptionInterceptor implements Serializable
{

@Inject
private FacesContext context;

@AroundInvoke
public Object catchException(InvocationContext ic) throws Exception
{
try
{
return ic.proceed();
}
catch (Throwable e)
{
context.addMessage(null, new FacesMessage(SEVERITY_ERROR, e.getMessage(), null));
return null;
}
}
}
@@ -1,4 +1,4 @@
package org.agoncal.sample.jsf.login.view;
package org.agoncal.sample.jsf.login.utils;

import com.thedeanda.lorem.Lorem;

Expand All @@ -9,7 +9,7 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FacesProducer
public class ResourceProducer
{

@Produces
Expand All @@ -34,7 +34,6 @@ private HttpServletResponse produceResponse()
}

@Produces
@RequestScoped
@Named("lorem")
private String produceLorem()
{
Expand Down
Expand Up @@ -23,6 +23,7 @@

import org.agoncal.sample.jsf.login.model.User;
import org.agoncal.sample.jsf.login.model.UserRole;
import org.agoncal.sample.jsf.login.utils.CatchException;

import com.thedeanda.lorem.Lorem;

Expand All @@ -32,6 +33,7 @@
@Named
@SessionScoped
@Transactional
@CatchException
public class AccountBean implements Serializable
{

Expand Down Expand Up @@ -61,7 +63,7 @@ public class AccountBean implements Serializable
private String password2;
// Remember me and cookie
private static final String COOKIE_NAME = "JSFSampleCookie";
private static final int COOKIE_AGE = 60; //Expires after 60 seconds or even 2_592_000 for one month
private static final int COOKIE_AGE = 60; // Expires after 60 seconds or even 2_592_000 for one month

private boolean rememberMe;

Expand Down Expand Up @@ -92,11 +94,22 @@ private void checkIfUserHasRememberMeCookie()

public String doSignup()
{
// Does the login already exists ?
if (em.createNamedQuery(User.FIND_BY_LOGIN, User.class).setParameter("login", user.getLogin())
.getResultList().size() > 0)
{
facesContext.addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_WARN, "Login already exists " + user.getLogin(),
"You must choose a different login"));
return null;
}

// Everything is ok, we can create the user
user.setPassword(password1);
em.persist(user);
resetPasswords();
facesContext.addMessage(null,
new FacesMessage("Successful", "Hi " + user.getFirstName() + ", welcome to this website"));
new FacesMessage(FacesMessage.SEVERITY_INFO, "Hi " + user.getFirstName(), "Welcome to this website"));
loggedIn = true;
if (user.getRole().equals(UserRole.ADMIN))
admin = true;
Expand Down Expand Up @@ -167,7 +180,7 @@ public String doForgotPassword()
String temporaryPassword = Lorem.getWords(1);
user.setPassword(user.digestPassword(temporaryPassword));
em.merge(user);
facesContext.addMessage(null, new FacesMessage("Email sent",
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Email sent",
"An email has been sent to " + user.getEmail() + " with temporary password :" + temporaryPassword));
// send an email with the password "dummyPassword"
return doLogout();
Expand All @@ -187,7 +200,8 @@ public String doUpdateProfile()
em.merge(user);
resetPasswords();
facesContext.addMessage(null,
new FacesMessage("Successful", "Profile has been updated for " + user.getFirstName()));
new FacesMessage(FacesMessage.SEVERITY_INFO, "Profile has been updated for " + user.getFirstName(),
null));
return null;
}

Expand Down
Expand Up @@ -10,12 +10,14 @@
import javax.persistence.PersistenceContext;

import org.agoncal.sample.jsf.login.model.User;
import org.agoncal.sample.jsf.login.utils.CatchException;

/**
* @author Antonio Goncalves http://www.antoniogoncalves.org --
*/
@Named
@RequestScoped
@CatchException
public class UserBean
{

Expand Down
5 changes: 5 additions & 0 deletions 03-Login/src/main/webapp/WEB-INF/beans.xml
Expand Up @@ -2,4 +2,9 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
version="1.1" bean-discovery-mode="all">

<interceptors>
<class>org.agoncal.sample.jsf.login.utils.CatchExceptionInterceptor</class>
</interceptors>

</beans>
6 changes: 3 additions & 3 deletions 03-Login/src/main/webapp/admin.xhtml
Expand Up @@ -12,21 +12,21 @@
<div class="col-md-4">
<h2>Heading</h2>

<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p>#{lorem}</p>

<p><a class="btn btn-default" href="#" role="button">View details </a></p>
</div>
<div class="col-md-4">
<h2>Heading</h2>

<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p>#{lorem}</p>

<p><a class="btn btn-default" href="#" role="button">View details </a></p>
</div>
<div class="col-md-4">
<h2>Heading</h2>

<p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p>
<p>#{lorem}</p>

<p><a class="btn btn-default" href="#" role="button">View details </a></p>
</div>
Expand Down
6 changes: 3 additions & 3 deletions 03-Login/src/main/webapp/index.xhtml
Expand Up @@ -12,21 +12,21 @@
<div class="col-md-4">
<h2>Heading</h2>

<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p>#{lorem}</p>

<p><a class="btn btn-default" href="#" role="button">View details </a></p>
</div>
<div class="col-md-4">
<h2>Heading</h2>

<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p>#{lorem}</p>

<p><a class="btn btn-default" href="#" role="button">View details </a></p>
</div>
<div class="col-md-4">
<h2>Heading</h2>

<p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p>
<p>#{lorem}</p>

<p><a class="btn btn-default" href="#" role="button">View details </a></p>
</div>
Expand Down

0 comments on commit c2cd75c

Please sign in to comment.