La sécurité de printemps obtient l'objet Utilisateur
J'ai mis en œuvre l'authentification de l'utilisateur par le biais de Printemps du Cadre de la Sécurité et tout fonctionne bien. Je peux me connecter et se déconnecter, je peux vous connecter nom d'utilisateur, par exemple comme ceci:
String userName = ((UserDetails) auth.getPrincipal()).getUsername();
Maintenant je veux obtenir de l'utilisateur comme un objet de base de données(j'ai besoin de l'id d'utilisateur et d'autres propriétés de l'utilisateur).
Ce que j'ai essayé jusqu'à présent:
User user = (User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
Par la suite j'ai obtenu exception suivante:
Request processing failed; nested exception is java.lang.ClassCastException: org.springframework.security.core.userdetails.User cannot be cast to net.viralpatel.contact.model.User
Ici est une question - comment puis-je obtenir de l'Utilisateur en tant qu'objet, comment dois-je modifier mes classes UserDetailsServiceImpl et UserAssembler, des idées?
@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);
}
}
Et un autre:
@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);
}
}
source d'informationauteur user3127896 | 2014-07-27
Vous devez vous connecter pour publier un commentaire.
Essentiellement, vous avez besoin de revenir à une mise en œuvre de
UserDetails
qui permet d'accéder à votreUser
.Vous avez deux options:
Ajouter votre
User
comme un champ (vous pouvez le faire à étendreorg.springframework.security.core.userdetails.User
):et obtenir un
User
de ce champ:Créer une classe qui étend votre
User
et met en œuvreUserDetails
:Cette approche permet de lancer le principal
User
directement:Vous avez besoin pour mettre en œuvre votre propre UserDetailsService et votre propre UserDetails objet(selon votre souhait):
Remarque:
C'est l'implémentation par défaut de l'Utilisateur de la classe, vous vous devez avoir quelques informations personnalisées que vous pouvez prendre une classe personnalisée et d'étendre la classe Utilisateur
Il ressemble à votre Utilisateur de la classe ne s'étendant pas au Printemps de l'org.springframework.de sécurité.de base.userdetails.L'utilisateur de la classe.
Voici un exemple de code pour la référence, je l'ai appelée " classe nommée 'AuthenticUser':
Maintenant, vous pouvez créer un objet de cette classe dans votre code et de le définir dans le cadre du Printemps Contexte d'Authentification, par exemple
Cela permettra d'authentifier l'utilisateur et le jeu de l'utilisateur dans un contexte de Sécurité.