Kontakt

Fakturační údaje

IČ: 87189224, BÚ: 1958653063/0800

Contact info in QR code

Musico

Informace

  • Webová aplikace vytvořená pomocí technologií EJB a JSF, s úmyslem nasazení na Glassfish serveru.
  • Psaná jako semestrální práce pro předmět X33EJA.
  • Účelem bylo osvojit si:
    • Návrh doménového modelu a jeho implementaci (alespoň jedna vazba M:N)
    • Použití JPA pro persistenci
    • Transakce
    • Použití EJB (stateless i statefull)
    • Lokalizaci do více jazyků
    • Autorizaci uživatelů, rozdělení do rolí a zabezpečení přístupu k business vrstvě
    • Webové rozhrání (servlety, jsp, nebo web framework)

Zdrojové kódy

  1: package cz.cvut.x33eja.macosond.business.user;
  2: 
  3: import cz.cvut.x33eja.macosond.business.util.Password;
  4: import cz.cvut.x33eja.macosond.persistence.entity.UserAccount;
  5: import cz.cvut.x33eja.macosond.persistence.entity.UserRole;
  6: import java.security.NoSuchAlgorithmException;
  7: import java.util.Collection;
  8: import java.util.logging.Level;
  9: import java.util.logging.Logger;
 10: import javax.annotation.Resource;
 11: import javax.annotation.security.PermitAll;
 12: import javax.annotation.security.RolesAllowed;
 13: import javax.ejb.SessionContext;
 14: import javax.ejb.Stateless;
 15: import javax.persistence.EntityManager;
 16: import javax.persistence.PersistenceContext;
 17: import javax.persistence.Query;
 18: 
 19: /**
 20:  *
 21:  * @author Ondrej Macoszek <macosond@fel.cvut.cz>
 22:  */
 23: @Stateless
 24: public class UserAccountBean implements UserAccountLocal
 25: {
 26:         @PersistenceContext(unitName="Musico-PU")
 27:         private EntityManager em;
 28: 
 29:         @Resource
 30:         private SessionContext sc;
 31: 
 32:         @PermitAll
 33:         public void add(UserAccount user)
 34:         {
 35:                 em.persist(user);
 36:         }
 37: 
 38:         @RolesAllowed({"member","admin"})
 39:         public void edit(UserAccount user)
 40:         {
 41:                 if(sc.isCallerInRole(UserRole.ADMIN)) {
 42:                         user = em.merge(user);
 43:                         em.persist(user);
 44:                 } else {
 45:                         UserAccount current = getCurrentUser();
 46:                         if(current.getUserAccountID().equals(user.getUserAccountID())) {
 47:                                 user = em.merge(user);
 48:                                 em.persist(user);
 49:                         }
 50:                 }
 51:         }
 52: 
 53:         @RolesAllowed({"admin"})
 54:         public void delete(UserAccount user)
 55:         {
 56:                 user = em.merge(user);
 57:                 em.remove(user);
 58:         }
 59: 
 60:         @PermitAll
 61:         public UserAccount get(UserAccount user)
 62:         {
 63:                 return em.find(UserAccount.class, user.getUserAccountID());
 64:         }
 65: 
 66:         @PermitAll
 67:         public UserAccount get(Integer UserAccountID)
 68:         {
 69:                 return em.find(UserAccount.class, UserAccountID);
 70:         }
 71: 
 72:         @PermitAll
 73:         public boolean usernameExists(String Username)
 74:         {
 75:                 Query query = em.createNamedQuery("UserAccount.byUsername");
 76:                 query.setParameter("Username", Username);
 77:                 if(query.getSingleResult() == null) {
 78:                         return false;
 79:                 } else {
 80:                         return true;
 81:                 }
 82:         }
 83: 
 84:         @PermitAll
 85:         public boolean emailExists(String Email)
 86:         {
 87:                 Query query = em.createNamedQuery("UserAccount.byEmail");
 88:                 query.setParameter("Email", Email);
 89:                 if(query.getSingleResult() == null) {
 90:                         return false;
 91:                 } else {
 92:                         return true;
 93:                 }
 94:         }
 95: 
 96:         @RolesAllowed({"member","admin"})
 97:         public boolean changePassword(String oldPassword, String newPassword)
 98:         {
 99:                 try {
100:                         UserAccount userAccount = getCurrentUser();
101:                         if (userAccount.getPassword().equals(Password.encode(oldPassword))) {
102:                                 userAccount.setPassword(Password.encode(newPassword));
103:                                 em.persist(userAccount);
104:                                 return true;
105:                         }
106:                         return false;
107:                 } catch (NoSuchAlgorithmException ex) {
108:                         Logger.getLogger(UserAccountBean.class.getName()).log(Level.SEVERE, null, ex);
109:                 }
110:                 return false;
111:         }
112: 
113:         @PermitAll
114:         public UserAccount getCurrentUser()
115:         {
116:                 String username = sc.getCallerPrincipal().getName();
117:                 if(username == null) {
118:                         return null;
119:                 }
120:                 Query query = em.createNamedQuery("UserAccount.byUsername");
121:                 query.setParameter("Username", username);
122:                 try {
123:                         return (UserAccount) query.getSingleResult();
124:                 } catch(javax.persistence.NoResultException ex) {
125:                         return null;
126:                 }
127:         }
128: 
129:         @RolesAllowed({"admin"})
130:         public Collection<UserAccount> getAll()
131:         {
132:                 return em.createNamedQuery("UserAccount.list").getResultList();
133:         }
134: }
135: