2017-05-20 3 views
-1

Ich habe unten Klasse bekam zum Authentifizieren von Benutzern in einem REST-ServiceCapture-Authentifizierungsfehler in Spring Security

@Service 
public class AuthenticationService { 

    private static final Logger log = LoggerFactory.getLogger(AuthenticationService.class); 

    @Autowired 
    private AuthenticationManager authenticationManager; 

    public void getAuthentication(AccountCredentials credentials) { 

     log.info("Authentication requested for user: " + credentials.getEmail()); 

     final Authentication authentication = authenticationManager.authenticate(
       new UsernamePasswordAuthenticationToken(
         credentials.getEmail(), 
         credentials.getPassword() 
       ) 
     ); 

     SecurityContextHolder.getContext().setAuthentication(authentication); 
    } 
} 

Die Authentifizierung funktioniert gut, aber ich möchte jedes Mal einzuloggen ein Authentifizierungsfehler ist. Die Art und Weise wie es jetzt funktioniert ist, dass ein 403 Status standardmäßig von Spring Security zurückgegeben wird. Wie kann ich Authentifizierungsfehler in einem Protokoll erfassen? Ich habe verschiedene Möglichkeiten ausprobiert, aber der Code wird nie erreicht, nachdem die 403 zurückgegeben wird, gibt es keinen anderen Code ausgeführt. Ich habe auch versucht mit einem try catch Block, aber das vermasselt den Fluss und ich müsste die 403 Antwort codieren. Ich möchte die 403 Statusmeldung behalten und dass kein anderer Code außer dass es in einem Protokoll erfasst wird, ausgeführt wird.

+1

Sie arbeiten an Spring Security, stattdessen empfehle ich die Integration mit, so dass Sie auch die Ereignisse von Spring Security einer von mehreren [failure events] (http://docs.spring.io/spring-security) zuhören können /site/docs/current/apidocs/org/springframework/security/authentication/event/AbstractAuthenticationFailureEvent.html). –

Antwort

0

ich implementiert es so nach Antwort von M. Deinum

@Component 
public class AuthenticationFailureListener 
     implements ApplicationListener<AuthenticationFailureBadCredentialsEvent> { 

    private static final Logger log = LoggerFactory.getLogger(AuthenticationFailureListener.class); 

    public void onApplicationEvent(AuthenticationFailureBadCredentialsEvent event) { 

     log.info("Authentication failed for user: " + event.getAuthentication().getPrincipal()); 

    } 
} 

großen Werke. Genau wonach gesucht wurde.