Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

change/webclient_error_handling #3785

Draft
wants to merge 16 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .github/workflows/all.workflows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ on:
inputs:
workflow:
type: choice
description: "Backend or frontend."
description: "Backend or frontend. These use slightly different workflows."
options:
- "backend"
- "frontend"
Expand Down Expand Up @@ -35,7 +35,7 @@ on:
sonar-enabled:
type: boolean
description: "Run Sonar scan?"
default: true
default: false

permissions:
contents: read
Expand Down
1 change: 1 addition & 0 deletions apps/adresse-service/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ sonarqube {

dependencies {
implementation "no.nav.testnav.libs:data-transfer-objects"
implementation "no.nav.testnav.libs:reactive-core"
implementation "no.nav.testnav.libs:security-core"
implementation "no.nav.testnav.libs:servlet-core"
implementation "no.nav.testnav.libs:servlet-security"
Expand Down
1 change: 1 addition & 0 deletions apps/adresse-service/settings.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ rootProject.name = "adresse-service"
includeBuild "../../plugins/java"

includeBuild "../../libs/data-transfer-objects"
includeBuild "../../libs/reactive-core"
includeBuild "../../libs/security-core"
includeBuild "../../libs/servlet-core"
includeBuild "../../libs/servlet-security"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,12 @@ public class PdlAdresseConsumer {
public PdlAdresseConsumer(
TokenExchange tokenExchange,
Consumers consumers,
WebClient.Builder webClientBuilder) {
WebClient webClient
) {
this.tokenExchange = tokenExchange;
serverProperties = consumers.getPdlServices();
this.webClient = webClientBuilder
this.webClient = webClient
.mutate()
.baseUrl(serverProperties.getUrl())
.build();
}
Expand All @@ -32,4 +34,5 @@ public PdlAdresseResponse sendAdressesoek(GraphQLRequest adresseQuery) {
.flatMap(token -> new PdlAdresseSoekCommand(webClient, adresseQuery, token.getTokenValue()).call())
.block();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -51,11 +51,13 @@ public AltinnConsumer(
MaskinportenConsumer maskinportenConsumer,
ObjectMapper objectMapper,
MapperFacade mapperFacade,
WebClient.Builder webClientBuilder, BrregConsumer brregConsumer) {

WebClient webClient,
BrregConsumer brregConsumer
) {
this.altinnConfig = altinnConfig;
this.maskinportenConsumer = maskinportenConsumer;
this.webClient = webClientBuilder
this.webClient = webClient
.mutate()
.baseUrl(altinnConfig.getUrl())
.codecs(clientDefaultCodecsConfigurer -> {
clientDefaultCodecsConfigurer
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import no.nav.testnav.altinn3tilgangservice.config.AltinnConfig;
import no.nav.testnav.altinn3tilgangservice.consumer.altinn.dto.AltinnAccessListResponseDTO;
import no.nav.testnav.altinn3tilgangservice.consumer.altinn.dto.OrganisasjonCreateDTO;
import no.nav.testnav.libs.reactivecore.utils.WebClientFilter;
import no.nav.testnav.libs.reactivecore.web.WebClientFilter;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.reactive.function.client.WebClient;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import no.nav.testnav.altinn3tilgangservice.config.AltinnConfig;
import no.nav.testnav.altinn3tilgangservice.consumer.altinn.dto.AltinnAccessListResponseDTO;
import no.nav.testnav.altinn3tilgangservice.consumer.altinn.dto.OrganisasjonDeleteDTO;
import no.nav.testnav.libs.reactivecore.utils.WebClientFilter;
import no.nav.testnav.libs.reactivecore.web.WebClientFilter;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import lombok.extern.slf4j.Slf4j;
import no.nav.testnav.altinn3tilgangservice.config.AltinnConfig;
import no.nav.testnav.altinn3tilgangservice.consumer.altinn.dto.AltinnAccessListResponseDTO;
import no.nav.testnav.libs.reactivecore.utils.WebClientFilter;
import no.nav.testnav.libs.reactivecore.web.WebClientFilter;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.reactive.function.client.WebClient;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import lombok.extern.slf4j.Slf4j;
import no.nav.testnav.altinn3tilgangservice.consumer.altinn.dto.AltinnAuthorizedPartiesRequestDTO;
import no.nav.testnav.altinn3tilgangservice.consumer.altinn.dto.AuthorizedPartyDTO;
import no.nav.testnav.libs.reactivecore.utils.WebClientFilter;
import no.nav.testnav.libs.reactivecore.web.WebClientFilter;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.reactive.function.client.WebClient;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import no.nav.testnav.libs.reactivecore.utils.WebClientFilter;
import no.nav.testnav.libs.reactivecore.web.WebClientFilter;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.reactive.function.client.WebClient;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,9 @@ public class BrregConsumer {

private final WebClient webClient;

public BrregConsumer(WebClient.Builder webClientBuilder) {
this.webClient = webClientBuilder
public BrregConsumer(WebClient webClient) {
this.webClient = webClient
.mutate()
.baseUrl(BRREG_URL)
.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import no.nav.testnav.altinn3tilgangservice.consumer.altinn.dto.BrregResponseDTO;
import no.nav.testnav.libs.reactivecore.utils.WebClientFilter;
import no.nav.testnav.libs.reactivecore.web.WebClientFilter;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.reactive.function.client.WebClient;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.nimbusds.jose.jwk.RSAKey;
import com.nimbusds.jwt.JWTClaimsSet;
import com.nimbusds.jwt.SignedJWT;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import no.nav.testnav.altinn3tilgangservice.config.MaskinportenConfig;
Expand All @@ -23,17 +24,12 @@

@Slf4j
@Component
@RequiredArgsConstructor
public class MaskinportenConsumer {

private final WebClient webClient;
private final MaskinportenConfig maskinportenConfig;

public MaskinportenConsumer(MaskinportenConfig maskinportenConfig, WebClient.Builder webClientBuilder) {

this.webClient = webClientBuilder.build();
this.maskinportenConfig = maskinportenConfig;
}

public Mono<String> getAccessToken() {

return new GetWellKnownCommand(webClient, maskinportenConfig).call()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import lombok.extern.slf4j.Slf4j;
import no.nav.testnav.altinn3tilgangservice.consumer.maskinporten.dto.AccessToken;
import no.nav.testnav.altinn3tilgangservice.consumer.maskinporten.dto.WellKnown;
import no.nav.testnav.libs.reactivecore.utils.WebClientFilter;
import no.nav.testnav.libs.reactivecore.web.WebClientFilter;
import org.springframework.web.reactive.function.BodyInserters;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import lombok.extern.slf4j.Slf4j;
import no.nav.testnav.altinn3tilgangservice.config.MaskinportenConfig;
import no.nav.testnav.altinn3tilgangservice.consumer.maskinporten.dto.WellKnown;
import no.nav.testnav.libs.reactivecore.utils.WebClientFilter;
import no.nav.testnav.libs.reactivecore.web.WebClientFilter;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ public class GithubConsumer {

public GithubConsumer(@Value("${consumers.github.url}") String url,
@Value("${consumers.github.token}") String token,
WebClient.Builder webClientBuilder) {

this.webClient = webClientBuilder
WebClient webClient) {
this.webClient = webClient
.mutate()
.baseUrl(url)
.defaultHeader(HttpHeaders.AUTHORIZATION, "token " + token)
.exchangeStrategies(ExchangeStrategies.builder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import no.nav.testnav.apps.apptilganganalyseservice.consumer.dto.BlobDTO;
import no.nav.testnav.libs.reactivecore.utils.WebClientFilter;
import no.nav.testnav.libs.reactivecore.web.WebClientFilter;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
import reactor.util.retry.Retry;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import no.nav.testnav.apps.apptilganganalyseservice.consumer.dto.BlobDTO;
import no.nav.testnav.libs.reactivecore.utils.WebClientFilter;
import no.nav.testnav.libs.reactivecore.web.WebClientFilter;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
import reactor.util.retry.Retry;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import lombok.RequiredArgsConstructor;
import no.nav.testnav.apps.apptilganganalyseservice.consumer.dto.SearchDTO;
import no.nav.testnav.libs.reactivecore.utils.WebClientFilter;
import no.nav.testnav.libs.reactivecore.web.WebClientFilter;
import org.springframework.http.HttpHeaders;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,12 @@ public class DollyBackendConsumer {
public DollyBackendConsumer(
Consumers consumers,
TokenExchange tokenService,
WebClient.Builder webClientBuilder
WebClient webClient
) {
serverProperties = consumers.getDollyBackend();
this.tokenService = tokenService;
this.webClient = webClientBuilder
this.webClient = webClient
.mutate()
.baseUrl(serverProperties.getUrl())
.build();
}
Expand Down Expand Up @@ -65,5 +66,5 @@ public List<Object> getAktiveBestillinger(Long gruppeId) {
.orElse(Collections.emptyList());

}

}
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,13 @@ public class AltinnTilgangServiceConsumer {
public AltinnTilgangServiceConsumer(
Consumers consumers,
TokenExchange tokenExchange,
WebClient.Builder webClientBuilder,
GetAuthenticatedUserId getAuthenticatedUserId) {

WebClient webClient,
GetAuthenticatedUserId getAuthenticatedUserId
) {
serverProperties = consumers.getTestnavAltinn3TilgangService();
this.tokenExchange = tokenExchange;
this.webClient = webClientBuilder
this.webClient = webClient
.mutate()
.baseUrl(serverProperties.getUrl())
.build();
this.getAuthenticatedUserId = getAuthenticatedUserId;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import lombok.RequiredArgsConstructor;
import no.nav.testnav.apps.brukerservice.consumer.dto.AltinnBrukerRequest;
import no.nav.testnav.libs.dto.altinn3.v1.OrganisasjonDTO;
import no.nav.testnav.libs.reactivecore.utils.WebClientFilter;
import no.nav.testnav.libs.reactivecore.web.WebClientFilter;
import org.springframework.http.HttpHeaders;
import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.web.reactive.function.client.WebClientResponseException;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,11 @@ static void tearDown() throws IOException {
void initialize() {
String baseUrl = String.format("http://localhost:%s",
mockBackEnd.getPort());
tokendingsClient = new TokendingsClient(baseUrl);
webClient = WebClient.builder().baseUrl(baseUrl).build();
tokendingsClient = new TokendingsClient(webClient, baseUrl);
this.webClient = webClient
.mutate()
.baseUrl(baseUrl)
.build();
objectMapper = new ObjectMapper();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,15 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
.authorizeHttpRequests(authorize -> {
authorize
.requestMatchers(
"/error",
"/failure/**",
"/internal/**",
"/webjars/**",
"/swagger",
"/swagger-resources/**",
"/v3/api-docs/**",
"/swagger-ui.html",
"/swagger-ui/**",
"/swagger",
"/error",
"/swagger-ui.html")
"/v3/api-docs/**",
"/webjars/**")
.permitAll();
if (allowApi) {
authorize
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,14 @@

import no.nav.dolly.budpro.Consumers;
import no.nav.testnav.libs.commands.generernavnservice.v1.GenererNavnCommand;
import no.nav.testnav.libs.reactivecore.config.WebClientConfig;
import no.nav.testnav.libs.securitycore.domain.ServerProperties;
import no.nav.testnav.libs.standalone.servletsecurity.exchange.TokenExchange;
import org.springframework.context.annotation.Import;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;

import java.util.Arrays;

@Service
@Import(WebClientConfig.class)
public class GeneratedNameService {

private final ServerProperties serverProperties;
Expand All @@ -22,11 +19,12 @@ public class GeneratedNameService {
GeneratedNameService(
Consumers consumers,
TokenExchange tokenExchange,
WebClient.Builder webClientBuilder
WebClient webClient
) {
serverProperties = consumers.getGenererNavnService();
this.tokenExchange = tokenExchange;
this.webClient = webClientBuilder
this.webClient = webClient
.mutate()
.baseUrl(serverProperties.getUrl())
.build();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package no.nav.dolly.budpro.test;

record DummyDTO(
String message
) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package no.nav.dolly.budpro.test;

import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.web.server.ResponseStatusException;
import reactor.core.publisher.Mono;

import java.time.Duration;

@RestController
@RequestMapping("/failure")
@RequiredArgsConstructor
public class EmulatedFailureController {

private final WebClient webClient;

@GetMapping("/get")
Mono<DummyDTO> generateRequestedFailure(
@RequestParam(value = "httpStatus", required = false, defaultValue = "500") int httpStatus,
@RequestParam(value = "delayInMillis", required = false, defaultValue = "0") long delayInMillis) {
return Mono
.delay(Duration.ofMillis(delayInMillis))
.then(Mono.error(new ResponseStatusException(HttpStatus.valueOf(httpStatus), "This is a generated failure with error code %s and delay %d".formatted(httpStatus, delayInMillis))));
}

@GetMapping("/selfcheck")
Mono<DummyDTO> selfCheck() {
return new SelfCheckCommand(webClient).call();
}

}
Loading
Loading