Skip to content

Commit 81d80db

Browse files
authored
Erstatter logging av request fra HttpClient til WebClient. (#624)
* Legger til egne connection pool for WebClient. * Tvinger Http 1.1 for å se om det løser problemet. * Fjerner connection provider og httpClient oppsett. Trekker filter ut som gjenbrukbar util. * Fjerner connectionprovider.
1 parent bca78e1 commit 81d80db

File tree

3 files changed

+30
-42
lines changed

3 files changed

+30
-42
lines changed

src/main/kotlin/no/nav/sifinnsynapi/saf/SafClientConfig.kt

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,13 @@ import no.nav.security.token.support.client.core.oauth2.OAuth2AccessTokenService
66
import no.nav.security.token.support.client.spring.ClientConfigurationProperties
77
import no.nav.sifinnsynapi.util.HttpHeaderConstants
88
import no.nav.sifinnsynapi.util.MDCUtil
9+
import no.nav.sifinnsynapi.util.WebClientUtils.requestLoggerFilter
910
import org.slf4j.LoggerFactory
1011
import org.springframework.beans.factory.annotation.Value
1112
import org.springframework.context.annotation.Bean
1213
import org.springframework.context.annotation.Configuration
1314
import org.springframework.http.HttpHeaders.AUTHORIZATION
14-
import org.springframework.http.client.reactive.ReactorClientHttpConnector
1515
import org.springframework.web.reactive.function.client.WebClient
16-
import reactor.netty.http.client.HttpClient
17-
import reactor.netty.http.client.HttpClientRequest
18-
import reactor.netty.http.client.HttpClientResponse
1916

2017
@Configuration
2118
class SafClientConfig(
@@ -35,24 +32,7 @@ class SafClientConfig(
3532
fun client() = GraphQLWebClient(
3633
url = "$safBaseUrl/graphql",
3734
builder = WebClient.builder()
38-
.clientConnector(
39-
ReactorClientHttpConnector(
40-
HttpClient.create()
41-
.wiretap(true) // viktig for å se H2/TLS-hendelser
42-
.doOnRequest { request: HttpClientRequest, _ ->
43-
logger.info("{} {} {}", request.version(), request.method(), request.resourceUrl())
44-
}
45-
.doOnResponse { response: HttpClientResponse, _ ->
46-
logger.info(
47-
"{} - {} {} {}",
48-
response.status().toString(),
49-
response.version(),
50-
response.method(),
51-
response.resourceUrl()
52-
)
53-
}
54-
)
55-
)
35+
.requestLoggerFilter(logger)
5636
.defaultRequest {
5737
it.header(AUTHORIZATION, "Bearer ${accessToken(azureSafClientProperties)}")
5838
val correlationId = MDCUtil.callIdOrNew()

src/main/kotlin/no/nav/sifinnsynapi/safselvbetjening/SafSelvbetjeningClientsConfig.kt

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import no.nav.security.token.support.client.spring.ClientConfigurationProperties
77
import no.nav.sifinnsynapi.util.HttpHeaderConstants.NAV_CALL_ID
88
import no.nav.sifinnsynapi.util.HttpHeaderConstants.X_CORRELATION_ID
99
import no.nav.sifinnsynapi.util.MDCUtil
10+
import no.nav.sifinnsynapi.util.WebClientUtils.requestLoggerFilter
1011
import org.slf4j.LoggerFactory
1112
import org.springframework.beans.factory.annotation.Value
1213
import org.springframework.boot.web.client.RestTemplateBuilder
@@ -16,19 +17,15 @@ import org.springframework.http.HttpHeaders.AUTHORIZATION
1617
import org.springframework.http.HttpRequest
1718
import org.springframework.http.client.ClientHttpRequestExecution
1819
import org.springframework.http.client.ClientHttpRequestInterceptor
19-
import org.springframework.http.client.reactive.ReactorClientHttpConnector
2020
import org.springframework.web.client.RestTemplate
2121
import org.springframework.web.reactive.function.client.WebClient
22-
import reactor.netty.http.client.HttpClient
23-
import reactor.netty.http.client.HttpClientRequest
24-
import reactor.netty.http.client.HttpClientResponse
2522
import java.util.*
2623

2724
@Configuration
2825
class SafSelvbetjeningClientsConfig(
2926
oauth2Config: ClientConfigurationProperties,
3027
private val oAuth2AccessTokenService: OAuth2AccessTokenService,
31-
@Value("\${no.nav.gateways.saf-selvbetjening-base-url}") private val safSelvbetjeningBaseUrl: String
28+
@Value("\${no.nav.gateways.saf-selvbetjening-base-url}") private val safSelvbetjeningBaseUrl: String,
3229
) {
3330

3431
private companion object {
@@ -42,18 +39,7 @@ class SafSelvbetjeningClientsConfig(
4239
fun graphQLClient() = GraphQLWebClient(
4340
url = "${safSelvbetjeningBaseUrl}/graphql",
4441
builder = WebClient.builder()
45-
.clientConnector(
46-
ReactorClientHttpConnector(
47-
HttpClient.create()
48-
.wiretap(true) // viktig for å se H2/TLS-hendelser
49-
.doOnRequest { request: HttpClientRequest, _ ->
50-
logger.info("{} {} {}", request.version(), request.method(), request.resourceUrl())
51-
}
52-
.doOnResponse { response: HttpClientResponse, _ ->
53-
logger.info("{} - {} {} {}", response.status().toString(), response.version(), response.method(), response.resourceUrl())
54-
}
55-
)
56-
)
42+
.requestLoggerFilter(logger)
5743
.defaultRequest {
5844
val correlationId = MDCUtil.callIdOrNew()
5945
it.header(NAV_CALL_ID, correlationId)
@@ -70,20 +56,25 @@ class SafSelvbetjeningClientsConfig(
7056
fun safSelvbetjeningRestTemplate(
7157
restTemplateBuilder: RestTemplateBuilder,
7258
clientConfigurationProperties: ClientConfigurationProperties,
73-
oAuth2AccessTokenService: OAuth2AccessTokenService
59+
oAuth2AccessTokenService: OAuth2AccessTokenService,
7460
): RestTemplate {
7561

7662
logger.info("Konfigurerer opp tokenx klient for safselvbetjening.")
7763
return restTemplateBuilder
7864
.rootUri(safSelvbetjeningBaseUrl)
7965
.defaultHeader(NAV_CALL_ID, UUID.randomUUID().toString())
80-
.additionalInterceptors(bearerTokenInterceptor(tokenxSafSelvbetjeningClientProperties, oAuth2AccessTokenService), requestLoggerInterceptor())
66+
.additionalInterceptors(
67+
bearerTokenInterceptor(
68+
tokenxSafSelvbetjeningClientProperties,
69+
oAuth2AccessTokenService
70+
), requestLoggerInterceptor()
71+
)
8172
.build()
8273
}
8374

8475
private fun bearerTokenInterceptor(
8576
clientProperties: ClientProperties,
86-
oAuth2AccessTokenService: OAuth2AccessTokenService
77+
oAuth2AccessTokenService: OAuth2AccessTokenService,
8778
): ClientHttpRequestInterceptor {
8879
return ClientHttpRequestInterceptor { request: HttpRequest, body: ByteArray, execution: ClientHttpRequestExecution ->
8980
val response = oAuth2AccessTokenService.getAccessToken(clientProperties)
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package no.nav.sifinnsynapi.util
2+
3+
import org.slf4j.Logger
4+
import org.springframework.web.reactive.function.client.WebClient
5+
6+
object WebClientUtils {
7+
8+
fun WebClient.Builder.requestLoggerFilter(logger: Logger) = filters { filters ->
9+
filters.add { request, next ->
10+
logger.info("---> {} {}", request.method(), request.url())
11+
next.exchange(request)
12+
.doOnNext {
13+
logger.info("<--- {} for {} {}", it.statusCode().value(), request.method(), request.url())
14+
}
15+
}
16+
}
17+
}

0 commit comments

Comments
 (0)