Skip to content

Commit 99629d0

Browse files
committed
Improve null-safety of module/spring-boot-security-oauth2-resource-server
See gh-46926
1 parent 72e6ddd commit 99629d0

File tree

4 files changed

+27
-11
lines changed

4 files changed

+27
-11
lines changed

module/spring-boot-security-oauth2-resource-server/src/main/java/org/springframework/boot/security/oauth2/server/resource/autoconfigure/reactive/ReactiveOAuth2ResourceServerJwkConfiguration.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
import org.springframework.security.oauth2.server.resource.authentication.ReactiveJwtAuthenticationConverter;
5757
import org.springframework.security.oauth2.server.resource.authentication.ReactiveJwtGrantedAuthoritiesConverterAdapter;
5858
import org.springframework.security.web.server.SecurityWebFilterChain;
59+
import org.springframework.util.Assert;
5960
import org.springframework.util.CollectionUtils;
6061

6162
/**
@@ -91,8 +92,9 @@ static class JwtConfiguration {
9192
@Bean
9293
@ConditionalOnProperty(name = "spring.security.oauth2.resourceserver.jwt.jwk-set-uri")
9394
ReactiveJwtDecoder jwtDecoder(ObjectProvider<JwkSetUriReactiveJwtDecoderBuilderCustomizer> customizers) {
94-
JwkSetUriReactiveJwtDecoderBuilder builder = NimbusReactiveJwtDecoder
95-
.withJwkSetUri(this.properties.getJwkSetUri())
95+
String jwkSetUri = this.properties.getJwkSetUri();
96+
Assert.state(jwkSetUri != null, "'jwkSetUri' must not be null");
97+
JwkSetUriReactiveJwtDecoderBuilder builder = NimbusReactiveJwtDecoder.withJwkSetUri(jwkSetUri)
9698
.jwsAlgorithms(this::jwsAlgorithms);
9799
customizers.orderedStream().forEach((customizer) -> customizer.customize(builder));
98100
NimbusReactiveJwtDecoder nimbusReactiveJwtDecoder = builder.build();
@@ -164,12 +166,12 @@ private String exactlyOneAlgorithm() {
164166
SupplierReactiveJwtDecoder jwtDecoderByIssuerUri(
165167
ObjectProvider<JwkSetUriReactiveJwtDecoderBuilderCustomizer> customizers) {
166168
return new SupplierReactiveJwtDecoder(() -> {
167-
JwkSetUriReactiveJwtDecoderBuilder builder = NimbusReactiveJwtDecoder
168-
.withIssuerLocation(this.properties.getIssuerUri());
169+
String issuerUri = this.properties.getIssuerUri();
170+
Assert.state(issuerUri != null, "'issuerUri' must not be null");
171+
JwkSetUriReactiveJwtDecoderBuilder builder = NimbusReactiveJwtDecoder.withIssuerLocation(issuerUri);
169172
customizers.orderedStream().forEach((customizer) -> customizer.customize(builder));
170173
NimbusReactiveJwtDecoder jwtDecoder = builder.build();
171-
jwtDecoder.setJwtValidator(
172-
getValidators(JwtValidators.createDefaultWithIssuer(this.properties.getIssuerUri())));
174+
jwtDecoder.setJwtValidator(getValidators(JwtValidators.createDefaultWithIssuer(issuerUri)));
173175
return jwtDecoder;
174176
});
175177
}

module/spring-boot-security-oauth2-resource-server/src/main/java/org/springframework/boot/security/oauth2/server/resource/autoconfigure/reactive/ReactiveOAuth2ResourceServerOpaqueTokenConfiguration.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.springframework.security.oauth2.server.resource.introspection.ReactiveOpaqueTokenIntrospector;
2727
import org.springframework.security.oauth2.server.resource.introspection.SpringReactiveOpaqueTokenIntrospector;
2828
import org.springframework.security.web.server.SecurityWebFilterChain;
29+
import org.springframework.util.Assert;
2930

3031
import static org.springframework.security.config.Customizer.withDefaults;
3132

@@ -46,9 +47,13 @@ static class OpaqueTokenIntrospectionClientConfiguration {
4647
@ConditionalOnProperty(name = "spring.security.oauth2.resourceserver.opaquetoken.introspection-uri")
4748
SpringReactiveOpaqueTokenIntrospector opaqueTokenIntrospector(OAuth2ResourceServerProperties properties) {
4849
OAuth2ResourceServerProperties.Opaquetoken opaquetoken = properties.getOpaquetoken();
50+
String clientId = opaquetoken.getClientId();
51+
Assert.state(clientId != null, "'clientId' must not be null");
52+
String clientSecret = opaquetoken.getClientSecret();
53+
Assert.state(clientSecret != null, "'clientSecret' must not be null");
4954
return SpringReactiveOpaqueTokenIntrospector.withIntrospectionUri(opaquetoken.getIntrospectionUri())
50-
.clientId(opaquetoken.getClientId())
51-
.clientSecret(opaquetoken.getClientSecret())
55+
.clientId(clientId)
56+
.clientSecret(clientSecret)
5257
.build();
5358
}
5459

module/spring-boot-security-oauth2-resource-server/src/main/java/org/springframework/boot/security/oauth2/server/resource/autoconfigure/servlet/OAuth2ResourceServerJwtConfiguration.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationConverter;
5656
import org.springframework.security.oauth2.server.resource.authentication.JwtGrantedAuthoritiesConverter;
5757
import org.springframework.security.web.SecurityFilterChain;
58+
import org.springframework.util.Assert;
5859
import org.springframework.util.CollectionUtils;
5960

6061
import static org.springframework.security.config.Customizer.withDefaults;
@@ -163,6 +164,7 @@ private String exactlyOneAlgorithm() {
163164
SupplierJwtDecoder jwtDecoderByIssuerUri(ObjectProvider<JwkSetUriJwtDecoderBuilderCustomizer> customizers) {
164165
return new SupplierJwtDecoder(() -> {
165166
String issuerUri = this.properties.getIssuerUri();
167+
Assert.state(issuerUri != null, "'issuerUri' must not be null");
166168
JwkSetUriJwtDecoderBuilder builder = NimbusJwtDecoder.withIssuerLocation(issuerUri);
167169
customizers.orderedStream().forEach((customizer) -> customizer.customize(builder));
168170
NimbusJwtDecoder jwtDecoder = builder.build();

module/spring-boot-security-oauth2-resource-server/src/main/java/org/springframework/boot/security/oauth2/server/resource/autoconfigure/servlet/OAuth2ResourceServerOpaqueTokenConfiguration.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.springframework.security.oauth2.server.resource.introspection.OpaqueTokenIntrospector;
2828
import org.springframework.security.oauth2.server.resource.introspection.SpringOpaqueTokenIntrospector;
2929
import org.springframework.security.web.SecurityFilterChain;
30+
import org.springframework.util.Assert;
3031

3132
import static org.springframework.security.config.Customizer.withDefaults;
3233

@@ -48,9 +49,15 @@ static class OpaqueTokenIntrospectionClientConfiguration {
4849
@ConditionalOnProperty(name = "spring.security.oauth2.resourceserver.opaquetoken.introspection-uri")
4950
SpringOpaqueTokenIntrospector opaqueTokenIntrospector(OAuth2ResourceServerProperties properties) {
5051
OAuth2ResourceServerProperties.Opaquetoken opaquetoken = properties.getOpaquetoken();
51-
return SpringOpaqueTokenIntrospector.withIntrospectionUri(opaquetoken.getIntrospectionUri())
52-
.clientId(opaquetoken.getClientId())
53-
.clientSecret(opaquetoken.getClientSecret())
52+
String introspectionUri = opaquetoken.getIntrospectionUri();
53+
Assert.state(introspectionUri != null, "'introspectionUri' must not be null");
54+
String clientId = opaquetoken.getClientId();
55+
Assert.state(clientId != null, "'clientId' must not be null");
56+
String clientSecret = opaquetoken.getClientSecret();
57+
Assert.state(clientSecret != null, "'clientSecret' must not be null");
58+
return SpringOpaqueTokenIntrospector.withIntrospectionUri(introspectionUri)
59+
.clientId(clientId)
60+
.clientSecret(clientSecret)
5461
.build();
5562
}
5663

0 commit comments

Comments
 (0)