AuthUserDetailsService.java

package org.xandercat.pmdb.service;

import java.util.Optional;

import org.springframework.beans.factory.annotation.Autowired;
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.xandercat.pmdb.dao.AuthDao;
import org.xandercat.pmdb.dao.UserDao;
import org.xandercat.pmdb.dto.PmdbUser;

/**
 * User details service for use by Spring security when loading user information.
 * 
 * @author Scott Arnold
 */
@Component
public class AuthUserDetailsService implements UserDetailsService {

	@Autowired
	private UserDao userDao;
	
	@Autowired
	private AuthDao authDao;
	
	@Override
	public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
		Optional<PmdbUser> user = userDao.getUser(username);
		if (!user.isPresent()) {
			throw new UsernameNotFoundException("User " + username + " not found.");
		}
		user.get().setGrantedAuthorities(authDao.getAuthorities(username));
		return user.get();
	}

}