Unexpected FeignException instead of ResponseEntity when the server returns 401
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 35/100
Direzione di ricerca
Riprodurre la chiamata AuthClient fornita con risposte 401, 200 e 500, quindi seguire ErrorDecoder$Default.decode attraverso InvocationContext, ResponseHandler e SynchronousMethodHandler. Confrontare i percorsi di gestione degli stati e ispezionare i punti di ingresso della decodifica delle risposte di Feign. Il lavoro è completato quando il comportamento di 401 è spiegato e, se modificato, è coperto insieme ai comportamenti esistenti di 200 e 500.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Originally asked in https://stackoverflow.com/questions/77880702/unexpected-feignexception-instead-of-responseentity-when-the-server-returns-401
In our application we use spring-cloud-starter-openfeign:4.1.0 for some interservice communication. Here's one of our clients:
@FeignClient(name = "authClient", url = "${spring.microservice.tenant-auth.host}")
public interface AuthClient {
@PostMapping(consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
ResponseEntity<AuthenticationResponse> getAuthToken(AuthFormData formData);
}
public class AuthFormData {
private String grant_type;
private String client_id;
private String client_secret;
public void setGrantType(String grantType) {
this.grant_type = grantType;
}
public void setClientId(String clientId) {
this.client_id = clientId;
}
public void setClientSecret(String clientSecret) {
this.client_secret = clientSecret;
}
}
public class AuthenticationResponse {
@JsonProperty("access_token")
private String accessToken;
@JsonProperty("token_type")
private String tokenType;
@JsonProperty("expires_in")
private int expiresIn;
@JsonProperty("scope")
private String scope;
@JsonProperty("refresh_token")
private String refreshToken;
@JsonProperty("id_token")
private String idToken;
}
In general this code works fine, but what puzzles me is the FeignException thrown from the callee in case the server returns 401:
AuthenticationResponse getToken(AuthFormData authFormData) {
var authResponse = authClient.getAuthToken(authFormData);
var body = authResponse.getBody();
if (!authResponse.getStatusCode().is2xxSuccessful() || body == null) {
throw new IllegalStateException("Failed to get auth token " + authResponse);
}
return body;
}
Here's the stacktrace:
feign.FeignException$Unauthorized: [401 Unauthorized] during [POST] to [https://somethin.com/oauth/token] [AuthClient#getAuthToken(AuthFormData)]: []
at feign.FeignException.clientErrorStatus(FeignException.java:224) ~[feign-core-13.1.jar:na]
at feign.FeignException.errorStatus(FeignException.java:203) ~[feign-core-13.1.jar:na]
at feign.FeignException.errorStatus(FeignException.java:194) ~[feign-core-13.1.jar:na]
at feign.codec.ErrorDecoder$Default.decode(ErrorDecoder.java:103) ~[feign-core-13.1.jar:na]
at feign.InvocationContext.decodeError(InvocationContext.java:126) ~[feign-core-13.1.jar:na]
at feign.InvocationContext.proceed(InvocationContext.java:72) ~[feign-core-13.1.jar:na]
at feign.ResponseHandler.handleResponse(ResponseHandler.java:63) ~[feign-core-13.1.jar:na]
at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:114) ~[feign-core-13.1.jar:na]
at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:70) ~[feign-core-13.1.jar:na]
at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:99) ~[feign-core-13.1.jar:na]
at jdk.proxy2/jdk.proxy2.$Proxy113.getAuthToken(Unknown Source) ~[na:na]
at c.c.o.p.m.AuthenticationTokenProvider.getToken(AuthenticationTokenProvider.java:34) ~[classes/:0.0.1-SNAPSHOT]
If the response is 200 or 500 then the ResponseEntity with corresponding status code is returned.
So my question is why do I get exception for 401 and is there a way to make the AuthClient return ResponseEntity with 401?
- Lingua principale
- Java
- Stelle
- 9.8k
- Fork
- 2k
- Merge medio
- 1h 15m
- PR unite (30g)
- 39
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di OpenFeign/feign
-
DefaultAsyncClient never completes the returned future when Client throws ErrorForse già presa @hutiefang76 l’ha presa 14 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 1 giorno
-
Response.charset ignores charset after another Content-Type parameterForse già presa @hutiefang76 l’ha presa 14 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 1 giorno
-
UriUtils ignores allowReservedCharacters=false when the input has no percent tripletForse già presa @hutiefang76 l’ha presa 14 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
Java11 Http2Client loses response header value order and duplicate occurrencesForse già presa @hutiefang76 l’ha presa 14 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 35/100
I maintainer di solito rispondono entro 1 giorno
-
Java11 Http2Client rejects documented zero connect and read timeoutsForse già presa @hutiefang76 l’ha presa 14 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 35/100
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di OpenFeign/feign
Issue simili
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
liberation-data/drivine4j#547 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
BindingServiceProperties.bindings regressed to a non-thread-safe TreeMap in GH-3158: concurrent first use of binding names corrupts itForse già presa @AkashB23 l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
spring-cloud/spring-cloud-stream#3321 ·
I maintainer di solito rispondono entro 1 giorno
-
[Bug] 资源包列表 与 模组/数据包/世界 列表排列顺序不一致Forse già presa @fishdry1000 l’ha presa 4 giorni fa. Apertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
I maintainer di solito rispondono entro 1 giorno
-
ai-driven-fuzzing bug claude Minor
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
linagora/twake-calendar-side-service#1333 ·
I maintainer di solito rispondono entro 1 giorno