1 year ago

#313442

test-img

Aleksa

Spring Boot Feign client - interceptor not working

I have feign client interceptor which adds Auth header (bearer token being fetched by RestTemplate). If the server responds with 401 (expired token) I want to reauthenticate and try the request again but the interceptor is not getting triggered 2nd time.

Interceptor code:

        @Override
        public void apply(RequestTemplate requestTemplate) {
            if (AuthenticationService.bearerToken == null)
                authenticationService.authenticate();
            requestTemplate.header(AUTHORIZATION, BEARER_TOKEN_PREFIX + AuthenticationService.bearerToken );
        }

Error decoder:

@Override
    public Exception decode(String s, Response response) {
        FeignException exception = feign.FeignException.errorStatus(s, response);
        switch (response.status()) {
            case 401:
                authenticationService.authenticate();
                return new RetryableException(response.status(), exception.getMessage(), response.request().httpMethod(), exception, null, response.request());
            case 500:
                throw new BadActionException(s, response.reason());
            default:
                break;
        }
        return exception;
    }

Client config class:

@Bean
    public RequestInterceptor requestInterceptor() {
        return new RequestInterceptor (authenticationService);
    }

@Bean
public RestClientDecoder restClientDecoder() {
    return new RestClientDecoder(authenticationService);
}

Feign client:

@FeignClient(value = "server", url = "${server.base-url}", configuration = RestClientConfig.class)
public interface RestClient {

    @PostMapping("api/test/{id}/confirm")
    void test(@PathVariable Long id);

}

Side note: is there built in interceptor for authentication other than oAuth and BasicAuth? The server I am communicating with has simple jwt auth with expiration.

spring-boot

spring-cloud-feign

openfeign

0 Answers

Your Answer

Accepted video resources