Skip to content

Commit baad23c

Browse files
committed
Enable null-safety in spring-security-oauth2-client
Closes gh-17819
1 parent bb06258 commit baad23c

126 files changed

Lines changed: 1381 additions & 533 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

config/src/test/java/org/springframework/security/config/oauth2/client/ClientRegistrationsBeanDefinitionParserTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ public void parseWhenIssuerUriConfiguredThenRequestConfigFromIssuer() throws Exc
157157
.isEqualTo(ClientAuthenticationMethod.CLIENT_SECRET_BASIC);
158158
assertThat(googleRegistration.getAuthorizationGrantType()).isEqualTo(AuthorizationGrantType.AUTHORIZATION_CODE);
159159
assertThat(googleRegistration.getRedirectUri()).isEqualTo("{baseUrl}/{action}/oauth2/code/{registrationId}");
160-
assertThat(googleRegistration.getScopes()).isNull();
160+
assertThat(googleRegistration.getScopes()).isEmpty();
161161
assertThat(googleRegistration.getClientName()).isEqualTo(serverUrl);
162162
ProviderDetails googleProviderDetails = googleRegistration.getProviderDetails();
163163
assertThat(googleProviderDetails).isNotNull();

config/src/test/kotlin/org/springframework/security/config/annotation/web/oauth2/login/AuthorizationEndpointDslTests.kt

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,11 @@ class AuthorizationEndpointDslTests {
7373

7474
companion object {
7575
val RESOLVER: OAuth2AuthorizationRequestResolver = object : OAuth2AuthorizationRequestResolver {
76-
override fun resolve(
77-
request: HttpServletRequest?
78-
) = OAuth2AuthorizationRequest.authorizationCode().build()
76+
override fun resolve(request: HttpServletRequest) =
77+
OAuth2AuthorizationRequest.authorizationCode().build()
7978

80-
override fun resolve(
81-
request: HttpServletRequest?, clientRegistrationId: String?
82-
) = OAuth2AuthorizationRequest.authorizationCode().build()
79+
override fun resolve(request: HttpServletRequest, clientRegistrationId: String) =
80+
OAuth2AuthorizationRequest.authorizationCode().build()
8381
}
8482
}
8583

docs/src/test/kotlin/org/springframework/security/kt/docs/features/integrations/rest/configurationwebclient/ServerWebClientHttpInterfaceIntegrationConfiguration.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class ServerWebClientHttpInterfaceIntegrationConfiguration {
4343
fun securityConfigurer(
4444
manager: ReactiveOAuth2AuthorizedClientManager?
4545
): OAuth2WebClientHttpServiceGroupConfigurer {
46-
return OAuth2WebClientHttpServiceGroupConfigurer.from(manager)
46+
return OAuth2WebClientHttpServiceGroupConfigurer.from(requireNotNull(manager))
4747
}
4848

4949
// end::config[]

oauth2/oauth2-client/spring-security-oauth2-client.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
plugins {
22
id 'javadoc-warnings-error'
3+
id 'security-nullability'
34
}
45

56
apply plugin: 'io.spring.convention.spring-module'

oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/AuthorizationCodeOAuth2AuthorizedClientProvider.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616

1717
package org.springframework.security.oauth2.client;
1818

19-
import org.springframework.lang.Nullable;
19+
import org.jspecify.annotations.Nullable;
20+
2021
import org.springframework.security.oauth2.client.registration.ClientRegistration;
2122
import org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestRedirectFilter;
2223
import org.springframework.security.oauth2.core.AuthorizationGrantType;
@@ -47,8 +48,7 @@ public final class AuthorizationCodeOAuth2AuthorizedClientProvider implements OA
4748
* the authorization request
4849
*/
4950
@Override
50-
@Nullable
51-
public OAuth2AuthorizedClient authorize(OAuth2AuthorizationContext context) {
51+
public @Nullable OAuth2AuthorizedClient authorize(OAuth2AuthorizationContext context) {
5252
Assert.notNull(context, "context cannot be null");
5353
if (AuthorizationGrantType.AUTHORIZATION_CODE.equals(
5454
context.getClientRegistration().getAuthorizationGrantType()) && context.getAuthorizedClient() == null) {

oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/AuthorizedClientServiceOAuth2AuthorizedClientManager.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
import java.util.Map;
2222
import java.util.function.Function;
2323

24-
import org.springframework.lang.Nullable;
24+
import org.jspecify.annotations.Nullable;
25+
2526
import org.springframework.security.core.Authentication;
2627
import org.springframework.security.oauth2.client.registration.ClientRegistration;
2728
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
@@ -113,9 +114,8 @@ public AuthorizedClientServiceOAuth2AuthorizedClientManager(
113114
.removeAuthorizedClient(clientRegistrationId, principal.getName()));
114115
}
115116

116-
@Nullable
117117
@Override
118-
public OAuth2AuthorizedClient authorize(OAuth2AuthorizeRequest authorizeRequest) {
118+
public @Nullable OAuth2AuthorizedClient authorize(OAuth2AuthorizeRequest authorizeRequest) {
119119
Assert.notNull(authorizeRequest, "authorizeRequest cannot be null");
120120
String clientRegistrationId = authorizeRequest.getClientRegistrationId();
121121
OAuth2AuthorizedClient authorizedClient = authorizeRequest.getAuthorizedClient();

oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/ClientCredentialsOAuth2AuthorizedClientProvider.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020
import java.time.Duration;
2121
import java.time.Instant;
2222

23-
import org.springframework.lang.Nullable;
23+
import org.jspecify.annotations.Nullable;
24+
2425
import org.springframework.security.oauth2.client.endpoint.OAuth2AccessTokenResponseClient;
2526
import org.springframework.security.oauth2.client.endpoint.OAuth2ClientCredentialsGrantRequest;
2627
import org.springframework.security.oauth2.client.endpoint.RestClientClientCredentialsTokenResponseClient;
@@ -61,8 +62,7 @@ public final class ClientCredentialsOAuth2AuthorizedClientProvider implements OA
6162
* re-authorization) is not supported
6263
*/
6364
@Override
64-
@Nullable
65-
public OAuth2AuthorizedClient authorize(OAuth2AuthorizationContext context) {
65+
public @Nullable OAuth2AuthorizedClient authorize(OAuth2AuthorizationContext context) {
6666
Assert.notNull(context, "context cannot be null");
6767
ClientRegistration clientRegistration = context.getClientRegistration();
6868
if (!AuthorizationGrantType.CLIENT_CREDENTIALS.equals(clientRegistration.getAuthorizationGrantType())) {
@@ -98,7 +98,8 @@ private OAuth2AccessTokenResponse getTokenResponse(ClientRegistration clientRegi
9898
}
9999

100100
private boolean hasTokenExpired(OAuth2Token token) {
101-
return this.clock.instant().isAfter(token.getExpiresAt().minus(this.clockSkew));
101+
Instant expiresAt = token.getExpiresAt();
102+
return expiresAt != null && this.clock.instant().isAfter(expiresAt.minus(this.clockSkew));
102103
}
103104

104105
/**

oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/ClientCredentialsReactiveOAuth2AuthorizedClientProvider.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,8 @@ public Mono<OAuth2AuthorizedClient> authorize(OAuth2AuthorizationContext context
8989
}
9090

9191
private boolean hasTokenExpired(OAuth2Token token) {
92-
return this.clock.instant().isAfter(token.getExpiresAt().minus(this.clockSkew));
92+
Instant expiresAt = token.getExpiresAt();
93+
return expiresAt != null && this.clock.instant().isAfter(expiresAt.minus(this.clockSkew));
9394
}
9495

9596
/**

oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/DelegatingOAuth2AuthorizedClientProvider.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
import java.util.Collections;
2222
import java.util.List;
2323

24-
import org.springframework.lang.Nullable;
24+
import org.jspecify.annotations.Nullable;
25+
2526
import org.springframework.util.Assert;
2627

2728
/**
@@ -64,8 +65,7 @@ public DelegatingOAuth2AuthorizedClientProvider(List<OAuth2AuthorizedClientProvi
6465
}
6566

6667
@Override
67-
@Nullable
68-
public OAuth2AuthorizedClient authorize(OAuth2AuthorizationContext context) {
68+
public @Nullable OAuth2AuthorizedClient authorize(OAuth2AuthorizationContext context) {
6969
Assert.notNull(context, "context cannot be null");
7070
for (OAuth2AuthorizedClientProvider authorizedClientProvider : this.authorizedClientProviders) {
7171
OAuth2AuthorizedClient oauth2AuthorizedClient = authorizedClientProvider.authorize(context);

oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/InMemoryOAuth2AuthorizedClientService.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import java.util.Map;
2020
import java.util.concurrent.ConcurrentHashMap;
2121

22+
import org.jspecify.annotations.Nullable;
23+
2224
import org.springframework.security.core.Authentication;
2325
import org.springframework.security.oauth2.client.registration.ClientRegistration;
2426
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
@@ -72,7 +74,7 @@ public InMemoryOAuth2AuthorizedClientService(ClientRegistrationRepository client
7274

7375
@Override
7476
@SuppressWarnings("unchecked")
75-
public <T extends OAuth2AuthorizedClient> T loadAuthorizedClient(String clientRegistrationId,
77+
public <T extends OAuth2AuthorizedClient> @Nullable T loadAuthorizedClient(String clientRegistrationId,
7678
String principalName) {
7779
Assert.hasText(clientRegistrationId, "clientRegistrationId cannot be empty");
7880
Assert.hasText(principalName, "principalName cannot be empty");

0 commit comments

Comments
 (0)