Ho implementato l'autenticazione utente tramite Spring Security Framework e tutto funziona correttamente. Posso entrare e uscire, posso fare il login nome utente per esempio come questo:Sicurezza di sicurezza get Oggetto utente
String userName = ((UserDetails) auth.getPrincipal()).getUsername();
Ora voglio ottenere utente come un oggetto dal database (ho bisogno di altre proprietà utente user id e).
questo modo ho provato finora:
User user = (User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
Successivamente mi sono seguente eccezione:
Request processing failed; nested exception is java.lang.ClassCastException: org.springframework.security.core.userdetails.User cannot be cast to net.viralpatel.contact.model.User
Ecco una domanda - come posso ottenere l'utente come oggetto, come devo modificare la mia classi UserDetailsServiceImpl e UserAssembler, qualche idea?
@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);
}
}
E un altro:
@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);
}
}
mia classe User è solo Entity – user3127896
Come accennato, è necessario estendere La classe utente di Spring. –
ho avuto errore - non esiste un costruttore predefinito per l'utente – user3127896