package de.rwth.idsg.bikeman.security; import de.rwth.idsg.bikeman.domain.Authority; import de.rwth.idsg.bikeman.domain.User; import de.rwth.idsg.bikeman.repository.UserRepository; import lombok.extern.slf4j.Slf4j; 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.UsernameNotFoundException; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import javax.inject.Inject; import java.util.ArrayList; import java.util.Collection; /** * Authenticate a user from the database. */ @Component("userDetailsService") @Slf4j public class UserDetailsService implements org.springframework.security.core.userdetails.UserDetailsService { @Inject private UserRepository userRepository; @Override @Transactional public UserDetails loadUserByUsername(final String login) { log.debug("Authenticating {}", login); String lowercaseLogin = login.toLowerCase(); User userFromDatabase = userRepository.findByLoginIgnoreCase(lowercaseLogin); if (userFromDatabase == null) { throw new UsernameNotFoundException("User " + lowercaseLogin + " was not found in the database"); } Collection<GrantedAuthority> grantedAuthorities = new ArrayList<GrantedAuthority>(); for (Authority authority : userFromDatabase.getAuthorities()) { GrantedAuthority grantedAuthority = new SimpleGrantedAuthority(authority.getName()); grantedAuthorities.add(grantedAuthority); } return new org.springframework.security.core.userdetails.User(lowercaseLogin, userFromDatabase.getPassword(), grantedAuthorities); } }