Describe the bug
This line session.getAttributes()throws NPE, if we have WebSession bean configuration like this to disable WebSession:
@Bean
fun webSessionManager(): WebSessionManager {
// Emulate SessionCreationPolicy.STATELESS
return WebSessionManager { exchange: ServerWebExchange? -> Mono.empty() }
}
```
**Expected behavior**
I thing we may do null-safety when we are trying to call getAuthorizedClients in [this place](https://github.com/spring-projects/spring-security/blob/main/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/web/server/WebSessionServerOAuth2AuthorizedClientRepository.java#L99) with nullable session.
**Configuration**
Spring Cloud Gateway.
@Bean fun authorizedClientManager( clientRegistrationRepository: ReactiveClientRegistrationRepository, authorizedClientRepository: ServerOAuth2AuthorizedClientRepository ): ReactiveOAuth2AuthorizedClientManager { val authorizedClientProvider = ReactiveOAuth2AuthorizedClientProviderBuilder .builder() .clientCredentials() .build() val authorizedClientManager = DefaultReactiveOAuth2AuthorizedClientManager( clientRegistrationRepository, authorizedClientRepository ) authorizedClientManager.setAuthorizedClientProvider(authorizedClientProvider) return authorizedClientManager }
@Bean
fun springSecurityFilterChainNonProd(
httpSecurity: ServerHttpSecurity,
someIntrospector: SomeIntrospector,
): SecurityWebFilterChain? {
return httpSecurity
.cors(Customizer.withDefaults())
.authorizeExchange { auth ->
auth.anyExchange().authenticated()
}
.oauth2ResourceServer { oauth2 ->
oauth2.opaqueToken {
it.introspector(someIntrospector)
}
}
.csrf { csrf -> csrf.disable() }
.logout { logout -> logout.disable() }
.build()
}
**Comment From: sjohnr**
@akovalyev, thanks for reaching out!
I want to point out that the javadoc for `WebSessionManager` states:
Return the {@link WebSession} for the given exchange. Always guaranteed to return an instance either matching to the session id requested by the client, or a new session either because the client did not specify one or because the underlying session expired. ```
Your configuration does not honor the contract and therefore the issue is in your application. I'm happy to help you find a way to support your use case, but we prefer to use GitHub issues only for bugs and enhancements, so it would be best to ask a question on Stack Overflow and update this issue with a link to the question (so that other people can find it).
I'm going to close this issue for now with the above explanation.