[jboss-user] [JBoss Seam] - Re: login & logout options

rmemoria do-not-reply at jboss.com
Mon Jul 30 20:08:22 EDT 2007


Hi Caye,

This is my authenticator bean:

@Name("authenticator")
  | @Stateless
  | public class AuthenticatorBean implements Authenticator {
  | 
  |     @In(required=false) @Out(required=false)
  |     UserLogin userLogin;
  |     
  |     @In Identity identity;
  | 
  |     @In(create=true) FacesMessages facesMessages;
  |     
  |     @PersistenceContext EntityManager entityManager;
  | 
  | 
  |     public boolean authenticate()
  |     {
  |     	String pwd = Passwords.hashPassword(identity.getPassword());
  |         
  |         try {
  |         	User user = (User)entityManager.createQuery("from User u where u.login = :login " +
  |         						"and upper(u.password) = :pwd")
  |         						.setParameter("login", identity.getUsername().toUpperCase())
  |         						.setParameter("pwd", pwd.toUpperCase())
  |         						.getSingleResult();
  | 
  |         	if (user.getRoles().size() == 0) {
  |         		facesMessages.addFromResourceBundle("login.norole");
  |         		return false;
  |         	}
  |         	
  |         	
  |             // saves login info
  |         	FacesContext facesContext = FacesContext.getCurrentInstance();
  |            	HttpServletRequest req = (HttpServletRequest) facesContext.getExternalContext().getRequest();
  |             String ipAddr = req.getRemoteAddr();
  |             String app = req.getHeader("User-Agent");
  | 
  |             userLogin = new UserLogin();
  |             userLogin.setUser(user);
  |             userLogin.setLoginDate(new java.util.Date());
  |             if (app.length() > 80)
  |             	app = app.substring(0, 80);
  |             userLogin.setApplication(app);
  |             userLogin.setIpAddress(ipAddr);
  |             entityManager.persist(userLogin);
  | 
  |             for (UserRole r: userLogin.getUser().getRoles()) {
  |             	identity.addRole(r.getName());
  |             }
  |             
  |             return true;
  |         }
  |         catch (NoResultException e) {
  |         	e.printStackTrace();
  |             return false;        	
  |         }
  |     }
  | 
  | 
  |     public void logout() {
  |         if ((userLogin != null)&&(userLogin.getLogoutDate() == null)) {
  |             userLogin = entityManager.merge(userLogin);
  |             userLogin.setLogoutDate(new java.util.Date());
  | 
  |             entityManager.persist(userLogin);
  | 
  |             System.out.println("Logout de " + userLogin.getUser().getLogin());
  |         }
  |     }
  | }

Check that I had to create it as a Stateless bean because of the EntityManager.

Regards,
Ricardo

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4068954#4068954

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4068954



More information about the jboss-user mailing list