IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

Récupérer l'utilisateur connécté avec Spring Security


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 33
    Par défaut Récupérer l'utilisateur connécté avec Spring Security
    Bonsoir
    j'utilise spring security dans mon application , j'ai une table utilisateur dans ma base de données mappée avec hibernate en classe Utilisateur , je l'utiliser pour m'authentifier , tout marche bien mais je veux recuperer l'utilisateur connecté pour des traitements métier, j'ai donc implémenté la méthode suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public Utilisateur getUtilisateur() {
     
    		Utilisateur user =  (Utilisateur) SecurityContextHolder
    				.getContext().getAuthentication().getPrincipal();
     
    		System.out.println(Utilisateur.getUsername() );
     
    		return user; 
    	}
    le problème
    c'est que j'ai l'erreur suivante qui s'affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     java.lang.ClassCastException: org.springframework.security.core.userdetails.User cannot be cast to ma.parametrage.model.Utilisateur
    je sais pas si je dois ajouter une configuration pour remédier à ça. j'ai réussi à récupérer le username avec SecurityContextHolder.getContext().getAuthentication().getName() mais moi j'aurais besoin d'au moins de l'id utilisateur pour l'utiliser dans d'autre requête . si quelqu'un peut m'aider je serais très reconnaissante

  2. #2
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 136
    Par défaut
    Ce que te retourne c'est pas une entité mais une classe implémentant l'interface org.springframework.security.core.userdetails.Userdetails

    La solution est de cree ta propre classe implémentant cette interface et la faire utiliser par Spring security.

    Pour qu'elle soit utilisé et rempli comme il faut, tu implémente ton propre service de login.

    voici un exemple tiré d'un projet perso:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    public class UserDetailsServiceImpl implements UserDetailsService {
     
     
    	/** The joueur dao. */
    	@Autowired
    	private JoueurDAO joueurDao;
     
    	/* (non-Javadoc)
    	 * @see org.springframework.security.core.userdetails.UserDetailsService#loadUserByUsername(java.lang.String)
    	 */
    	@Override
    	public UserDetails loadUserByUsername(String login)
    			throws UsernameNotFoundException, DataAccessException {
     
    		UserDetailSecurityImpl utilisateur = null;
     
    		Joueur joueur = joueurDao.getByEmail(login);
    		if (joueur == null) {
    			throw new UsernameNotFoundException(login + " non trouvée");
    		} else {
     
    			utilisateur = new  UserDetailSecurityImpl(login);
    			utilisateur.setPassword(joueur.getPassword());
    			utilisateur.setEnabled(joueur.isEnable());
    			utilisateur.setIdJoueur(joueur.getIdJoueur());
    			for (String role : joueur.getRoles()) {
    				utilisateur.addAuthorities(role);
    			}
    		}
     
    		return utilisateur;
    	}
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    package com.hopeless.security;
     
    import java.util.ArrayList;
    import java.util.Collection;
     
    import org.springframework.security.core.GrantedAuthority;
     
    import com.hopeless.utils.ConstantesConfig;
     
    // TODO: Auto-generated Javadoc
    /**
     * The Class UserDetailSecurityImpl.
     */
    public class UserDetailSecurityImpl implements org.springframework.security.core.userdetails.UserDetails {
     
    	/** The Constant serialVersionUID. */
    	private static final long serialVersionUID = -5024829739284004929L;
     
    	/** The _username. */
    	private String username;
     
    	/** The _password. */
    	private String password;
     
    	/** The _autorites. */
    	private Collection<GrantedAuthority> listAutorites;
     
    	/** The id joueur. */
    	private Long idJoueur;
     
    	/** The enabled. */
    	private boolean enabled;
     
    	/**
             * Constructeur ayant en parametre le nom de l'utilisateur.
             *
             * @param user the username
             */
    	public UserDetailSecurityImpl(String user) {
    		username = user;
    		listAutorites = new ArrayList<GrantedAuthority>();
    		addAuthorities(ConstantesConfig.ROLE_LOGGED);
    		addAuthorities(ConstantesConfig.ROLE_ANONYMOUS);
    	}
     
    	/**
             * Methode permetant de mettre le password.
             *
             * @param newPassword the new password
             */
    	public void setPassword(String newPassword) {
    		password = newPassword;
    	}
     
    	/**
             * Methode permetant de mettre les autorites.
             *
             * @param autorities the autorities
             */
    	public void addAuthorities(String autorities) {
    		listAutorites.add(new GrantedAutorityImpl(autorities));
    	}
     
    	/* (non-Javadoc)
    	 * @see org.springframework.security.core.userdetails.UserDetails#getAuthorities()
    	 */
    	@Override
    	public Collection<GrantedAuthority> getAuthorities() {
    		return listAutorites;
    	}
     
    	/* (non-Javadoc)
    	 * @see org.springframework.security.core.userdetails.UserDetails#getPassword()
    	 */
    	@Override
    	public String getPassword() {
     
    		return password;
    	}
     
    	/* (non-Javadoc)
    	 * @see org.springframework.security.core.userdetails.UserDetails#getUsername()
    	 */
    	@Override
    	public String getUsername() {
     
    		return username;
    	}
     
    	/* (non-Javadoc)
    	 * @see org.springframework.security.core.userdetails.UserDetails#isAccountNonExpired()
    	 */
    	@Override
    	public boolean isAccountNonExpired() {
    		return true;
    	}
     
    	/* (non-Javadoc)
    	 * @see org.springframework.security.core.userdetails.UserDetails#isAccountNonLocked()
    	 */
    	@Override
    	public boolean isAccountNonLocked() {
     
    		return true;
    	}
     
    	/* (non-Javadoc)
    	 * @see org.springframework.security.core.userdetails.UserDetails#isCredentialsNonExpired()
    	 */
    	@Override
    	public boolean isCredentialsNonExpired() {
    		return true;
    	}
     
    	/* (non-Javadoc)
    	 * @see org.springframework.security.core.userdetails.UserDetails#isEnabled()
    	 */
    	@Override
    	public boolean isEnabled() {
    		return enabled;
    	}
     
    	/**
             * Sets the enabled.
             *
             * @param newEnabled the new enabled
             */
    	public void setEnabled(boolean newEnabled) {
    		enabled = newEnabled;
    	}
     
    	/**
             * Gets the id joueur.
             *
             * @return the idJoueur
             */
    	public Long getIdJoueur() {
    		return idJoueur;
    	}
     
    	/**
             * Sets the id joueur.
             *
             * @param newIdJoueur the idJoueur to set
             */
    	public void setIdJoueur(Long newIdJoueur) {
    		this.idJoueur = newIdJoueur;
    	}
     
    }
    le fichier de configuration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	<authentication-manager>
    		<authentication-provider  user-service-ref="userDetailsService">
    			<password-encoder ref="passwordEncoder">
    				<salt-source user-property="salt"/>
    			</password-encoder>
    		</authentication-provider>
    	</authentication-manager>
     
    	<!--  Service de recuperation d'utilisateur -->
    	<beans:bean  id="userDetailsService" class="com.hopeless.services.security.UserDetailsServiceImpl">
    	</beans:bean>

    Après tu pourra caster ce que tu récupéré de Spring security en UserDetailSecurityImpl et faire un getId() dessus.

Discussions similaires

  1. [Security] Récupération du username avec Spring Security 3
    Par _sept_ dans le forum Spring
    Réponses: 2
    Dernier message: 27/03/2011, 15h19
  2. Réponses: 1
    Dernier message: 06/03/2011, 16h54
  3. Réponses: 1
    Dernier message: 19/12/2010, 12h44
  4. [Security] gestion expiration session avec Spring security
    Par devparadize dans le forum Spring
    Réponses: 1
    Dernier message: 20/09/2010, 12h40
  5. [Security] Ajouts des aspects (before et after-returning) avec spring security
    Par naoufel1986 dans le forum Spring
    Réponses: 1
    Dernier message: 22/07/2010, 12h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo