Spring Security Passwort-Authentifizierung

brauchen Sie Hilfe oder Richtung, die mit Spring security 3.1.x.

Ich bin die Speicherung eines verschlüsselten Passworts in der MySql-Datenbank. Welches Passwort ist definiert als ein varchar(60) - Spalte.

Ersten mal läuft der web-app, generiert ich das Passwort mit dem folgenden code-snippet:

String p = "12345";
PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String encodedPassword = passwordEncoder.encode(p);

Nahm ich dann den String encodedPassword und eingefügt werden in der Spalte in der Datenbank. Hielt ich den code in meinem authentication-manager (snippet folgt), und protokolliert encodedPassword an den server melden.

<security:authentication-manager alias="authenticationManager">
    <security:authentication-provider user-service-ref="usersDAO"> 
        <security:password-encoder ref="encoder" />
    </security:authentication-provider>
</security:authentication-manager>

<bean id="encoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder" />

Mein problem ist, dass die Authentifizierung fehlschlägt, mit Ausnahme: Bad-Anmeldeinformationen, wenn BCryptPasswordEncoder.matches() ausgeführt wird. Das gespeicherte Passwort ist nicht in übereinstimmung mit der erzeugten hash aus der Eingabe in ein Formular. Die gleichen text-Passwort, die verwendet wurde, in den ersten hash Erzeugung verwendet wurde.

Jedes mal, wenn ich re-run der login-Eingabe den gleichen text, der protokolliert encodedPassword ist anders. Debuggen kann ich sehen, wo die entity wird aus der Datenbank zurückgegeben korrekt, also denke ich nicht, das ist ein Problem. Das Problem scheint mir, dass ich es nicht mache/Einstellung etwas richtig in Ordnung zu generieren, die denselben hash jedes mal, wenn der text
Passwort eingegeben wird.

BEARBEITEN:
Hinzufügen usersDAO.

import org.springframework.security.core.userdetails.UserDetailsService;

public interface UsersDAO extends Dao<Users>, UserDetailsService 
{
    Users getByUsername(String username);   
}

BEARBEITEN:
hinzufügen von Implementierung.

import org.springframework.dao.DataAccessException;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


@Repository("usersDAO")
public class UsersDAO_DB extends AbstractHibernateDao<Users> implements UsersDAO
{
final Logger log = LoggerFactory.getLogger(this.getClass());

@Override
public Users getByUsername(String username) 
{
    String p = "12345";
    PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
    String encodedPassword = passwordEncoder.encode(p);
    log.debug("HELLOZ  ---->  " + encodedPassword);

    notNull(username, "username can't be null");
    return (Users) getSession()
        .getNamedQuery("users.byUsername")
        .setParameter("username", username)
        .uniqueResult();
}

@Override
@Transactional
public UserDetails loadUserByUsername(String username) throws     UsernameNotFoundException, DataAccessException {
    notNull(username, "username can't be null");
    Users users = getByUsername(username);
    if (users == null) {
        throw new UsernameNotFoundException("No user with username " +  username);
    }
    return users;
}


@Override
public void create(Users t)
{
    //TODO Auto-generated method stub
}

@Override
public void update(Users t)
{
    //TODO Auto-generated method stub

}

@Override
public void delete(Users t)
{
    //TODO Auto-generated method stub

}

}

Irgendwelche Ideen?

InformationsquelleAutor Ron | 2013-10-24

Schreibe einen Kommentar