Code:
/*
* Created on 2005-2-20
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
import java.util.Iterator;
import net.sf.acegisecurity.GrantedAuthority;
import net.sf.acegisecurity.GrantedAuthorityImpl;
import net.sf.acegisecurity.UserDetails;
import net.sf.acegisecurity.providers.dao.AuthenticationDao;
import net.sf.acegisecurity.providers.dao.UsernameNotFoundException;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Query;
import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.dao.DataAccessException;
import org.springframework.dao.DataRetrievalFailureException;
import org.springframework.orm.hibernate.SessionFactoryUtils;
/**
* @author Creatxr
*
*/
public class AuthenticationDaoHibernateImpl implements AuthenticationDao {
/**
* Logger for this class
*/
private static final Log logger = LogFactory
.getLog(AuthenticationDaoHibernateImpl.class);
private SessionFactory sessionFactory;
/*
* (non-Javadoc)
*
* @see net.sf.acegisecurity.providers.dao.AuthenticationDao#loadUserByUsername(java.lang.String)
*/
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException, DataAccessException {
Session session = null;
try {
session = SessionFactoryUtils.getSession(sessionFactory, true);
Query query = session.createQuery("from UserDetails userDetails where userDetails.username=:username");
query.setString("username", username);
Iterator it = query.iterate();
if (it.hasNext()) {
com.fjky.xfile.core.orm.UserDetails row = (com.fjky.xfile.core.orm.UserDetails)it.next();
UserDetailsImpl userDetails = new UserDetailsImpl();
userDetails.setUsername(username);
userDetails.setPassword(row.getPassword());
userDetails.setEnabled(row.getEnabled().booleanValue());
userDetails.setAccountNonExpired(row.getAccountNonExpired().booleanValue());
userDetails.setCredentialsNonExpired(row.getCredentialsNonExpired().booleanValue());
userDetails.setAccountNonLocked(row.getAccountNonLocked().booleanValue());
String[] authoriesArray = row.getAuthorities().split(",", 0);
GrantedAuthority[] grantedAuthority = new GrantedAuthority[authoriesArray.length];
for (int i=0; i<authoriesArray.length; i++) {
grantedAuthority[i] = new GrantedAuthorityImpl(authoriesArray[i].trim());
}
userDetails.setAuthorities(grantedAuthority);
return userDetails;
} else {
throw new UsernameNotFoundException(username);
}
} catch(HibernateException he) {
throw SessionFactoryUtils.convertHibernateAccessException(he);
} catch(UsernameNotFoundException e) {
logger.error("loadUserByUsername(String)", e);
throw new DataRetrievalFailureException("loadUserByUsername(String)", e);
} finally {
SessionFactoryUtils.closeSessionIfNecessary(session, sessionFactory);
}
}
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
}