@@ -29,6 +29,8 @@ import org.springframework.web.server.ResponseStatusException
29
29
import org.springframework.web.server.ServerWebExchange
30
30
import org.springframework.web.server.WebFilterChain
31
31
import reactor.core.publisher.Mono
32
+ import java.util.Optional
33
+ import kotlin.jvm.optionals.getOrNull
32
34
33
35
/* *
34
36
* If `SecurityContext` contains [OAuth2AuthenticationToken] the [OidcAuthenticationProcessor] handles the
@@ -56,14 +58,16 @@ class OidcAuthenticationProcessor(
56
58
exchange : ServerWebExchange ,
57
59
chain : WebFilterChain ,
58
60
): Mono <Void > {
59
- val authorizedClientMono = oauth2ClientRepository.loadAuthorizedClient<OAuth2AuthorizedClient >(
60
- authenticationToken.authorizedClientRegistrationId,
61
- authenticationToken,
62
- exchange,
63
- )
61
+ val authorizedClientMono: Mono <Optional <OAuth2AuthorizedClient >> =
62
+ oauth2ClientRepository.loadAuthorizedClient<OAuth2AuthorizedClient ?>(
63
+ authenticationToken.authorizedClientRegistrationId,
64
+ authenticationToken,
65
+ exchange,
66
+ ).map { Optional .of(it) }.defaultIfEmpty(Optional .empty<OAuth2AuthorizedClient >())
67
+
64
68
val userContextMono = getUserContextForAuthenticationToken(authenticationToken)
65
69
return Mono .zip(authorizedClientMono, userContextMono).flatMap { tuple ->
66
- val authorizedClient = tuple.t1
70
+ val authorizedClient = tuple.t1.getOrNull()
67
71
val userContext = tuple.t2
68
72
if (userContext.user == null ) {
69
73
logger.info { " Session was logged out" }
@@ -81,7 +85,7 @@ class OidcAuthenticationProcessor(
81
85
authenticationToken.name,
82
86
AuthMethod .OIDC ,
83
87
authenticationToken.getClaim(userContext.organization.oauthSubjectIdClaim),
84
- authorizedClient.accessToken.tokenValue,
88
+ authorizedClient? .accessToken? .tokenValue, // Handle null authorizedClient
85
89
) {
86
90
chain.filter(exchange)
87
91
}
0 commit comments