Я реализовал аутентификацию пользователя через Spring Security Framework, и все работает нормально. Я могу войти в систему и выйти из системы, я могу получить имя зарегистрированного пользователя, например:
String userName = ((UserDetails) auth.getPrincipal()).getUsername();
Теперь я хочу получить пользователя как объект из базы данных (мне нужен идентификатор пользователя и другие пользовательские свойства).
Как я уже пробовал:
User user = (User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
После этого я получил следующее исключение:
Request processing failed; nested exception is java.lang.ClassCastException: org.springframework.security.core.userdetails.User cannot be cast to net.viralpatel.contact.model.User
Вот вопрос: как я могу получить User как объект, как мне изменить мои классы UserDetailsServiceImpl и UserAssembler, любые идеи?
@Component
@Transactional
public class UserDetailsServiceImpl implements UserDetailsService{
@Autowired
private UserDAO userDAO;
@Autowired
private UserAssembler userAssembler;
private static final Logger logger = LoggerFactory.getLogger(UserDetailsServiceImpl.class);
@Transactional(readOnly = true)
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException {
User user = userDAO.findByEmail(username);
if(null == user) throw new UsernameNotFoundException("User not found");
return userAssembler.buildUserFromUser(user);
}
}
И еще один:
@Service("assembler")
public class UserAssembler {
@Autowired
private UserDAO userDAO;
@Transactional(readOnly = true)
public User buildUserFromUser(net.viralpatel.contact.model.User user) {
String role = "ROLE_USER";//userEntityDAO.getRoleFromUserEntity(userEntity);
Collection<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
authorities.add(new GrantedAuthorityImpl(role));
return new User(user.getLogin(), user.getPassword(), true, true, true, true, authorities);
}
}