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 :

Spring Security 4 Bad credentials


Sujet :

Spring Java

  1. #1
    Membre régulier
    Femme Profil pro
    Etudiante
    Inscrit en
    Avril 2012
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Avril 2012
    Messages : 203
    Points : 85
    Points
    85
    Par défaut Spring Security 4 Bad credentials
    Je continue à obtenir BadCredentialsException lorsque j’essaye d'ouvrir une session et se connecter à mon application web que j'ai programmé avec SpringMVC 4.3.2 Hibernate5.1.0 et Maven 3

    Mon application fonctionne très bien sans Spring Security, donc je pense que je manque quelque chose dans le code HELP!

    spring-security.xml

    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
    <?xml version="1.0" encoding="UTF-8"?>
    <beans:beans xmlns="http://www.springframework.org/schema/security"
     xmlns:beans="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans.xsd
     http://www.springframework.org/schema/security 
     http://www.springframework.org/schema/security/spring-security.xsd">
     
         <!-- enable use-expressions -->
        <http auto-config="true" use-expressions="true">
             <intercept-url pattern="/" access="permitAll" />
             <intercept-url pattern="/home" access="permitAll" />
             <intercept-url pattern="/admin**" access="hasRole('PRVG_ADMIN')" />
             <intercept-url pattern="/api**" access="hasRole('PRVG_ADMIN') or hasRole('PRVG_USER')" />
             <!-- access denied page -->
             <access-denied-handler error-page="/Access_Denied" />
             <form-login    login-processing-url="/login"
                            login-page="/login" 
                            default-target-url="/home" 
                            username-parameter="email"
                            password-parameter="password"
                            authentication-failure-url="/login?error"/>
             <!-- enable csrf protection -->
             <csrf/>
        </http>
     
        <beans:bean id="encoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder">
            <beans:constructor-arg name="strength" value="11" />
        </beans:bean>
     
        <beans:bean id="userDAO" class="org.arw.crm.dao.CRMUserDAOImpl" />
     
         <!-- Select users and privileges from database -->
        <authentication-manager >
        <authentication-provider user-service-ref="customUserDetailsService">
            <password-encoder ref="encoder" />
        </authentication-provider>
        </authentication-manager>
     
        <beans:bean id="customUserDetailsService" class="org.arw.crm.service.CustomUserDetailsService">
            <beans:property name="userDAO" ref="userDAO"></beans:property>
            <beans:property name="passwordEncoder" ref="encoder"></beans:property>
        </beans:bean>
    </beans:beans>
    CustomUserDetailsService.java

    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
     
    @Configurable
    @Transactional
    public class CustomUserDetailsService implements UserDetailsService {
     
        @Autowired
        @Qualifier("passwordEncoder")
        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        public BCryptPasswordEncoder getPasswordEncoder() {
            return passwordEncoder;
        }
        public void setPasswordEncoder(BCryptPasswordEncoder passwordEncoder) {
            this.passwordEncoder = passwordEncoder;
        }
     
        @Autowired
        @Qualifier("userDAO")
        private CRMUserDAO userDAO;
        public CRMUserDAO getUserDAO() {
            return userDAO;
        }
        public void setUserDAO(CRMUserDAO userDAO) {
            this.userDAO = userDAO;
        }
     
        @Transactional(readOnly=true)
        @Override
        public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
     
            org.arw.crm.entity.CRMUser user = userDAO.findByEmail(email);
     
            boolean enabled = true;
            boolean accountNotExpired = true;
            boolean credentialsNotExpired = true;
            boolean accountNotLocked = true;
            if (user == null)
                throw new UsernameNotFoundException("User not found" + email);
     
            List<GrantedAuthority> authorities =     buildUserAuthority(user.getPrivileges());
            System.out.println("***********************************************"+passwordEncoder.encode(user.getPassword()));
            return new User(user.getEmail(), passwordEncoder.encode(user.getPassword()), enabled, accountNotExpired, credentialsNotExpired, accountNotLocked, authorities);
        }
     
         private List<GrantedAuthority> buildUserAuthority(Set<Privilege> privileges) {
     
             Set<GrantedAuthority> setAuths = new HashSet<GrantedAuthority>();
             for (Privilege prvlg : privileges) {
                 setAuths.add(new SimpleGrantedAuthority(prvlg.getPrivilege()));
             }
             List<GrantedAuthority> Result = new ArrayList<GrantedAuthority>(setAuths);
             return Result;
         }
    }
    les utilisateurs de l'application sont insérés dans la base de donnée comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
            CRMUser crmuser1 = new CRMUser("a1", "A1", "admin1@gmail.com", passwordEncoder.encode("admin1"));

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 936
    Points : 4 356
    Points
    4 356
    Par défaut
    Vous encodez le mot de passe lorsque vous créez l'utilisateur dans la DB ce qui est correct,
    mais vous appelez une deuxième fois encode() lorsque vous relisez le record dans loadUserByUsername()


Discussions similaires

  1. [Spring Security] implementer son propre UserDetailService
    Par santati dans le forum Spring Web
    Réponses: 0
    Dernier message: 14/01/2009, 10h34
  2. [Spring Security] question concernant un filtre d'ACEGI
    Par flamant dans le forum Spring Web
    Réponses: 2
    Dernier message: 22/10/2008, 07h37
  3. [Security] Spring security VS JAAS
    Par Sniper37 dans le forum Spring
    Réponses: 2
    Dernier message: 21/08/2008, 16h54
  4. [Spring Security] Authentification par groupe LDAP
    Par titeuf92 dans le forum Spring Web
    Réponses: 2
    Dernier message: 25/06/2008, 10h28

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