2016-07-12 3 views
0

Meine App verwendet Feder Wolke oauth2 Ruhe und eckig.Wie man loggt fehlgeschlagen/Erfolg mit oauth2 Grant_type = Passwort

Mein Ziel ist es, die Feder-Server zu verwenden, um die maximale Anzahl von Anmeldefehlern zu begrenzen

angular2 Login-Code:

const body = "username=" + encodeURI(username) + "&password=" + encodeURI(password) + 
     "&grant_type=password&client_id=" + encodeURI(this.clientId); 

this.http.post("/oauth/token",body,{headers:authHeaders}).map{ 
... 
} 

Feder Auth-Server Web-Sicherheitscode ein:

@Override 
     protected void configure(HttpSecurity http) throws Exception { 

     http.httpBasic().and().sessionManagement() 
       .sessionCreationPolicy(SessionCreationPolicy.STATELESS) 
       .and().authorizeRequests() 
      .anyRequest().authenticated(); 
     } 

Ich versuche diese beiden Ereignisse:

public class AuthenticationFailureListener 
    implements ApplicationListener<AuthenticationFailureBadCredentialsEvent>{ 
@Override 
    public void onApplicationEvent(AuthenticationFailureBadCredentialsEvent e) { 
    //... 
} 
} 

und:

public class AuthenticationSuccessListener 
    implements ApplicationListener<AuthenticationSuccessEvent> { 
    @Override 
    public void onApplicationEvent(AuthenticationSuccessEvent e) { 
//... 
} 
} 

Aber es funktioniert nicht

Wie hören "Login fehlschlagen und Erfolg"?

Antwort

0

Spring Security wird NICHT veröffentlichen AuthenticationFailureBadCredentialsEvent Ereignis von Standard (Anmeldung fehlgeschlagen).

Sie müssen überschreiben DefaultAuthenticationEventPublisher mit ApplicationEventPublisher.

Dies muss in Ihrer Authentifizierung Konfiguration Klasse wie folgt getan werden.

@Configuration 
protected static class MyAuthenticationConfiguration extends 
     GlobalAuthenticationConfigurerAdapter { 

    @Value("${ldap.url}") 
    String url; 

    @Value("${ldap.base}") 
    String base; 

    @Value("${ldap.managerDn}") 
    String managerDn; 

    @Value("${ldap.password}") 
    String password; 

    @Autowired 
    ApplicationEventPublisher applicationEventPublisher; 


    @Override 
    public void init(AuthenticationManagerBuilder auth) throws Exception { 
     auth.ldapAuthentication().userSearchFilter("sAMAccountName={0}") 
       .userSearchBase(base).contextSource().url(url) 
       .managerDn(managerDn).managerPassword(password); 
     //This publisher will trigger AuthenticationFailureBadCredentialsEvent (AbstractAuthenticationFailureEvent) 
     auth.authenticationEventPublisher(new DefaultAuthenticationEventPublisher(applicationEventPublisher)); 

    } 

Um formularbasierte Authentifizierung, fügen Sie unten in die configure() -Methode zu unterstützen.

.and().formLogin(); 

Komplette Konfigurationsmethode sollte ähnlich wie unten sein.

@Override 
protected void configure(HttpSecurity http) throws Exception { 

http.authorizeRequests().antMatchers("/css/**").permitAll() 
     .anyRequest().fullyAuthenticated().and().formLogin(); 
super.configure(http); 

} 
+0

Entschuldigung Ich bin nicht vertraut mit LDAP ... –

+0

LDAP-Authentifizierung ist nur ein Beispiel für Authentifizierungs-Manager. Sie können In-Memory- oder JDBC-Authentifizierung verwenden. –

Verwandte Themen