package org.fuzzydb.samples.security;
import org.fuzzydb.samples.repositories.UserRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.data.repository.CrudRepository;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
/**
* Simple UserDetailsService implementation
*
* In fact, this is a generic {@link CrudRepository} implementation
*
* @author Neale Upstone
*
*/
public class WhirlwindUserDetailsService implements UserDetailsService {
static private Logger log = LoggerFactory.getLogger(WhirlwindUserDetailsService.class);
@Autowired
private UserRepository repository;
@Override
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException, DataAccessException {
WhirlwindUserDetails userDetails = repository.findOne(username);
if (userDetails == null) {
throw new UsernameNotFoundException("'" + username + "' is not a registered user id");
}
if (userDetails.getAuthorities() == null || userDetails.getAuthorities().size() == 0) {
throw new UsernameNotFoundException("User '" + username + "' has no granted authorities");
}
log.debug("Found user: {}", username);
return userDetails;
}
}