package it.demo.twitterlike.server.security; import it.demo.twitterlike.server.domain.Authority; import it.demo.twitterlike.server.domain.User; import it.demo.twitterlike.server.repository.UserRepository; import java.util.ArrayList; import java.util.Collection; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; @Component("userDetailsService") @Transactional public class RepositoryBasedUserDetailsService implements UserDetailsService { private final Logger log = LoggerFactory.getLogger(UserDetailsService.class); @Autowired private UserRepository userRepository; @Override @Transactional public UserDetails loadUserByUsername(final String login) { log.debug("Authenticating {}", login); String lowercaseLogin = login.toLowerCase(); User userFromDatabase = userRepository.findOne(lowercaseLogin); if (userFromDatabase == null) { throw new UsernameNotFoundException("User " + lowercaseLogin + " was not found in the database"); } else if (!userFromDatabase.getActivated()) { // throw new UserNotActivatedException("User " + lowercaseLogin + " was not activated"); } Collection<GrantedAuthority> grantedAuthorities = new ArrayList<>(); for (Authority authority : userFromDatabase.getAuthorities()) { GrantedAuthority grantedAuthority = new SimpleGrantedAuthority(authority.getName()); grantedAuthorities.add(grantedAuthority); } return new InternalUserDetails(userFromDatabase, grantedAuthorities); } }