/* vim: set ts=2 et sw=2 cindent fo=qroca: */ package com.globant.katari.user.integration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.commons.lang.Validate; import org.acegisecurity.userdetails.UserDetailsService; import org.acegisecurity.userdetails.UserDetails; import org.acegisecurity.userdetails.UsernameNotFoundException; import com.globant.katari.user.domain.User; import com.globant.katari.user.domain.UserRepository; /** A user details service needed by acegi, that that obtains the user * information from the application domain. */ public class DomainUserDetailsService implements UserDetailsService { /** The class logger. */ private static Logger log = LoggerFactory.getLogger(DomainUserDetailsService.class); /** The user service used to get the domain user. * * It is never null. */ private UserRepository userRepository; /** Builds an instance of this service. * * @param theUserRepository The user repository to get the domain user from. * It cannot be null. */ public DomainUserDetailsService(final UserRepository theUserRepository) { Validate.notNull(theUserRepository, "The user repository cannot be null"); userRepository = theUserRepository; } /** Obtains the user details from a user name. * * @param username The user name to search. This cannot be null. * * @return Returns the user details needed by acegi. Specifically, an * instance of DomainUserDetails. */ public UserDetails loadUserByUsername(final String username) { log.trace("Entering loadUserByUsername"); Validate.notNull(username, "The username cannot be null"); User user = userRepository.findUserByName(username); if (user == null) { throw new UsernameNotFoundException("User not found: " + username); } UserDetails userDetails = new DomainUserDetails(user); log.trace("Leaving loadUserByUsername"); return userDetails; } }