Abbiamo un'API di riposo che utilizza Spring OAuth2
. Dopo che l'utente è autenticato, tutte le risposte JSON sono nel seguente formato:Come avvolgere un'eccezione OAuth2?
{"code" : 12345, "data" : "..." }
Ma la risposta JSON per errori di autenticazione non è in linea con il formato sopra descritto, in quanto tale è gestito da Spring.
Ad esempio in caso di credenziali non corrette, i clienti ottenere il codice di stato HTTP 400 con risposta JSON come segue:
{"error": "invalid_grant", "error_description": "Bad credentials" }
Nel caso in cui l'account utente è bloccato, i clienti ottengono il codice di stato HTTP 400 con JSON risposta come segue
{"error":"invalid_grant","error_description":"User account is locked"}
Tutto ciò è causa Spring TokenEndpoint.handleException() gestisce le eccezioni associati/oauth/gettone
Vorrei modificare la risposta JSON per gli errori OAuth2 per seguire il primo formato.
Questo è quello che ho provato finora senza successo:
- Uso ControllerAdvice con alto ordine precendenza & uso @ExceptionHandler come descritto here
- attuazione OAuth2ExceptionRenderer come descritto here
- attuare ExceptionMapper
- aggiunto un nuovo ObjectMapper con l'estensione di StdSerializer. Sebbene il mio objectmapper sia inizializzato, non viene usato per serializzare le eccezioni. Forse perché Spring chiama direttamente MappingJackson2HttpMessageConverter e sembra che ci siano diverse istanze di questa classe nella mia app.
Qualsiasi aiuto in uno degli approcci sopra o uno nuovo sarebbe molto apprezzato.
Non ho provato l'approccio this poiché non riesco a modificare il contextpath per i client esistenti.
come posso usare ExceptionMapper da tradurre eccezione? –
@FerasOdeh ExceptionMapper è la funzione JAX-WS, ci sono molti esempi su Internet. Meglio creare una nuova domanda se necessario – MangEngkus
@MangEngkus Come posso risolvere 'approvalStore' in quanto sono le variabili di livello di classe di ApprovalStoreUserApprovalHandler e sto ottenendo sotto l'eccezione, Causato da: org.springframework.beans.factory.NoSuchBeanDefinitionException: Nessun bean chiamato 'approvalStore' è definito – Soumyaansh