Wie kann ich programmgesteuert authentifizieren Benutzer mit Spring Security mit DaoAuthenticationProvider

Ich Frage mich, was ich falsch mache hier, einen Benutzer zu authentifizieren. Ich habe eine Anwendung, wo der Benutzer durchläuft mehrere Schritte auf Ihr Konto zu aktivieren, und nach dem tun so ich möchte umgehen das login-Formular und nehmen Sie direkt zu Ihrem dashboard.

Hier ist, was mein automatischen login-Funktion sieht wie folgt aus:

protected void automatedLogin(String username, String password, HttpServletRequest request) {

        try {
            //Must be called from request filtered by Spring Security, otherwise SecurityContextHolder is not updated
            CustomUserDetailsService udService = new CustomUserDetailsService(userDAO, request);
            UserDetails uDetails = udService.loadUserByUsername(username);
            UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(uDetails, password);
            token.setDetails(new WebAuthenticationDetails(request));
            DaoAuthenticationProvider authenticator = new DaoAuthenticationProvider();
            Authentication authentication = authenticator.authenticate(token);
            SecurityContextHolder.getContext().setAuthentication(authentication);
        } catch (Exception e) {
            e.printStackTrace();
            SecurityContextHolder.getContext().setAuthentication(null);
        }

    }

Ich muss die DaoAuthenticationProvider Klasse, wie meine Authentifizierungs-provider. Ich habe überprüft, dass ich immer ein UserDetails Modell mit den richtigen Anmeldeinformationen, ID, Autorität, Rollen, etc.

Beim Aufruf der authenticate-Methode, die ich in einem Null-Zeiger irgendwo auf dem Weg in die DaoAuthenticationProvider Klasse:

org.springframework.Sicherheit.die Authentifizierung.AuthenticationServiceException
bei
org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:109)
bei
org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationprovider.authenticate(AbstractUserDetailsAuthenticationprovider.java:132)
bei
com.bosch.Aktionen.BaseController.doAutoLogin(BaseController.java:659)
. . . Verursacht durch: java.lang.NullPointerException bei
org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:101)

Ich bin wirklich nicht sicher, was ist null, da ich nicht den source-code zur Verfügung.

Bearbeiten
Ich war in der Lage, den Quellcode zu finden hier - https://github.com/SpringSource/spring-security/blob/master/core/src/main/java/org/springframework/security/authentication/dao/DaoAuthenticationProvider.java

War ich in der Lage, um rund um den Null-Zeiger durch explizites festlegen der UserDetailsService auf das Objekt:

authenticator.setUserDetailsService(udService);

Aber jetzt bekomme ich schlecht Anmeldeinformationen Ausnahme, wenn ich weiß, das Passwort korrekt ist, denn ich habe gesehen, dass es in den debugger in die UserDetails Objekt eingestellt, die zuvor im code.

org.springframework.Sicherheit.die Authentifizierung.BadCredentialsException:
Bad-Zugangsdaten an
org.springframework.security.authentication.dao.DaoAuthenticationProvider.additionalAuthenticationChecks(DaoAuthenticationProvider.java:87)
bei
org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationprovider.authenticate(AbstractUserDetailsAuthenticationprovider.java:149)

  • Spring Security ist open source, brauchen Sie den Quellcode zur Verfügung. Sie sind wahrscheinlich Probleme, weil DaoAuthenticationProvider ist entworfen, um ein spring managed bean.
InformationsquelleAutor rawkfist0215 | 2013-08-01
Schreibe einen Kommentar