Zaimplementowałem uwierzytelnianie użytkownika za pomocą Spring Security Framework i wszystko działa poprawnie. mogę się zalogować i wylogować, mogę się zalogować nazwę użytkownika, na przykład tak:Zabezpieczenie przed wiosennym pobraniem obiektu użytkownika
String userName = ((UserDetails) auth.getPrincipal()).getUsername();
Teraz chcę uzyskać użytkownikowi jak przedmiot z bazy danych (muszę identyfikator użytkownika i inne właściwości użytkownika).
ten sposób próbowałem dotąd:
User user = (User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
Następnie dostałem następujący wyjątek:
Request processing failed; nested exception is java.lang.ClassCastException: org.springframework.security.core.userdetails.User cannot be cast to net.viralpatel.contact.model.User
Oto jest pytanie - w jaki sposób można uzyskać użytkownika, jak przedmiot, jak należy zmodyfikować mój klasy UserDetailsServiceImpl i UserAssembler, wszelkie pomysły?
@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);
}
}
I jeszcze jedno:
@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);
}
}
moja klasa Użytkownik nie jest tylko Podmiot – user3127896
Jak wspomniano, trzeba rozszerzyć Wiosenna klasa użytkownika. –
Mam błąd - nie ma domyślnego konstruktora dla użytkownika – user3127896