Skip to content

Commit 2d685c2

Browse files
committed
Add nullability annotations to module/spring-boot-security-saml2
See gh-46587
1 parent 0fde29d commit 2d685c2

File tree

3 files changed

+54
-48
lines changed

3 files changed

+54
-48
lines changed

module/spring-boot-security-saml2/src/main/java/org/springframework/boot/security/saml2/autoconfigure/Saml2RelyingPartyProperties.java

Lines changed: 44 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import java.util.List;
2222
import java.util.Map;
2323

24+
import org.jspecify.annotations.Nullable;
25+
2426
import org.springframework.boot.context.properties.ConfigurationProperties;
2527
import org.springframework.core.io.Resource;
2628
import org.springframework.security.saml2.provider.service.registration.Saml2MessageBinding;
@@ -76,7 +78,7 @@ public static class Registration {
7678
/**
7779
* Name ID format for a relying party registration.
7880
*/
79-
private String nameIdFormat;
81+
private @Nullable String nameIdFormat;
8082

8183
public String getEntityId() {
8284
return this.entityId;
@@ -106,11 +108,11 @@ public AssertingParty getAssertingparty() {
106108
return this.assertingparty;
107109
}
108110

109-
public String getNameIdFormat() {
111+
public @Nullable String getNameIdFormat() {
110112
return this.nameIdFormat;
111113
}
112114

113-
public void setNameIdFormat(String nameIdFormat) {
115+
public void setNameIdFormat(@Nullable String nameIdFormat) {
114116
this.nameIdFormat = nameIdFormat;
115117
}
116118

@@ -166,26 +168,26 @@ public static class Credential {
166168
/**
167169
* Private key used for signing.
168170
*/
169-
private Resource privateKeyLocation;
171+
private @Nullable Resource privateKeyLocation;
170172

171173
/**
172174
* Relying Party X509Certificate shared with the identity provider.
173175
*/
174-
private Resource certificateLocation;
176+
private @Nullable Resource certificateLocation;
175177

176-
public Resource getPrivateKeyLocation() {
178+
public @Nullable Resource getPrivateKeyLocation() {
177179
return this.privateKeyLocation;
178180
}
179181

180-
public void setPrivateKeyLocation(Resource privateKey) {
182+
public void setPrivateKeyLocation(@Nullable Resource privateKey) {
181183
this.privateKeyLocation = privateKey;
182184
}
183185

184-
public Resource getCertificateLocation() {
186+
public @Nullable Resource getCertificateLocation() {
185187
return this.certificateLocation;
186188
}
187189

188-
public void setCertificateLocation(Resource certificate) {
190+
public void setCertificateLocation(@Nullable Resource certificate) {
189191
this.certificateLocation = certificate;
190192
}
191193

@@ -215,26 +217,26 @@ public static class Credential {
215217
/**
216218
* Private key used for decrypting.
217219
*/
218-
private Resource privateKeyLocation;
220+
private @Nullable Resource privateKeyLocation;
219221

220222
/**
221223
* Relying Party X509Certificate shared with the identity provider.
222224
*/
223-
private Resource certificateLocation;
225+
private @Nullable Resource certificateLocation;
224226

225-
public Resource getPrivateKeyLocation() {
227+
public @Nullable Resource getPrivateKeyLocation() {
226228
return this.privateKeyLocation;
227229
}
228230

229-
public void setPrivateKeyLocation(Resource privateKey) {
231+
public void setPrivateKeyLocation(@Nullable Resource privateKey) {
230232
this.privateKeyLocation = privateKey;
231233
}
232234

233-
public Resource getCertificateLocation() {
235+
public @Nullable Resource getCertificateLocation() {
234236
return this.certificateLocation;
235237
}
236238

237-
public void setCertificateLocation(Resource certificate) {
239+
public void setCertificateLocation(@Nullable Resource certificate) {
238240
this.certificateLocation = certificate;
239241
}
240242

@@ -250,32 +252,32 @@ public static class AssertingParty {
250252
/**
251253
* Unique identifier for the identity provider.
252254
*/
253-
private String entityId;
255+
private @Nullable String entityId;
254256

255257
/**
256258
* URI to the metadata endpoint for discovery-based configuration.
257259
*/
258-
private String metadataUri;
260+
private @Nullable String metadataUri;
259261

260262
private final Singlesignon singlesignon = new Singlesignon();
261263

262264
private final Verification verification = new Verification();
263265

264266
private final Singlelogout singlelogout = new Singlelogout();
265267

266-
public String getEntityId() {
268+
public @Nullable String getEntityId() {
267269
return this.entityId;
268270
}
269271

270-
public void setEntityId(String entityId) {
272+
public void setEntityId(@Nullable String entityId) {
271273
this.entityId = entityId;
272274
}
273275

274-
public String getMetadataUri() {
276+
public @Nullable String getMetadataUri() {
275277
return this.metadataUri;
276278
}
277279

278-
public void setMetadataUri(String metadataUri) {
280+
public void setMetadataUri(@Nullable String metadataUri) {
279281
this.metadataUri = metadataUri;
280282
}
281283

@@ -299,43 +301,39 @@ public static class Singlesignon {
299301
/**
300302
* Remote endpoint to send authentication requests to.
301303
*/
302-
private String url;
304+
private @Nullable String url;
303305

304306
/**
305307
* Whether to redirect or post authentication requests.
306308
*/
307-
private Saml2MessageBinding binding;
309+
private @Nullable Saml2MessageBinding binding;
308310

309311
/**
310312
* Whether to sign authentication requests.
311313
*/
312-
private Boolean signRequest;
314+
private @Nullable Boolean signRequest;
313315

314-
public String getUrl() {
316+
public @Nullable String getUrl() {
315317
return this.url;
316318
}
317319

318-
public void setUrl(String url) {
320+
public void setUrl(@Nullable String url) {
319321
this.url = url;
320322
}
321323

322-
public Saml2MessageBinding getBinding() {
324+
public @Nullable Saml2MessageBinding getBinding() {
323325
return this.binding;
324326
}
325327

326-
public void setBinding(Saml2MessageBinding binding) {
328+
public void setBinding(@Nullable Saml2MessageBinding binding) {
327329
this.binding = binding;
328330
}
329331

330-
public boolean isSignRequest() {
331-
return this.signRequest;
332-
}
333-
334-
public Boolean getSignRequest() {
332+
public @Nullable Boolean getSignRequest() {
335333
return this.signRequest;
336334
}
337335

338-
public void setSignRequest(Boolean signRequest) {
336+
public void setSignRequest(@Nullable Boolean signRequest) {
339337
this.signRequest = signRequest;
340338
}
341339

@@ -365,13 +363,13 @@ public static class Credential {
365363
* Locations of the X.509 certificate used for verification of incoming
366364
* SAML messages.
367365
*/
368-
private Resource certificate;
366+
private @Nullable Resource certificate;
369367

370-
public Resource getCertificateLocation() {
368+
public @Nullable Resource getCertificateLocation() {
371369
return this.certificate;
372370
}
373371

374-
public void setCertificateLocation(Resource certificate) {
372+
public void setCertificateLocation(@Nullable Resource certificate) {
375373
this.certificate = certificate;
376374
}
377375

@@ -389,39 +387,39 @@ public static class Singlelogout {
389387
/**
390388
* Location where SAML2 LogoutRequest gets sent to.
391389
*/
392-
private String url;
390+
private @Nullable String url;
393391

394392
/**
395393
* Location where SAML2 LogoutResponse gets sent to.
396394
*/
397-
private String responseUrl;
395+
private @Nullable String responseUrl;
398396

399397
/**
400398
* Whether to redirect or post logout requests.
401399
*/
402-
private Saml2MessageBinding binding;
400+
private @Nullable Saml2MessageBinding binding;
403401

404-
public String getUrl() {
402+
public @Nullable String getUrl() {
405403
return this.url;
406404
}
407405

408-
public void setUrl(String url) {
406+
public void setUrl(@Nullable String url) {
409407
this.url = url;
410408
}
411409

412-
public String getResponseUrl() {
410+
public @Nullable String getResponseUrl() {
413411
return this.responseUrl;
414412
}
415413

416-
public void setResponseUrl(String responseUrl) {
414+
public void setResponseUrl(@Nullable String responseUrl) {
417415
this.responseUrl = responseUrl;
418416
}
419417

420-
public Saml2MessageBinding getBinding() {
418+
public @Nullable Saml2MessageBinding getBinding() {
421419
return this.binding;
422420
}
423421

424-
public void setBinding(Saml2MessageBinding binding) {
422+
public void setBinding(@Nullable Saml2MessageBinding binding) {
425423
this.binding = binding;
426424
}
427425

module/spring-boot-security-saml2/src/main/java/org/springframework/boot/security/saml2/autoconfigure/Saml2RelyingPartyRegistrationConfiguration.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
import java.util.Map;
2626
import java.util.function.Consumer;
2727

28+
import org.jspecify.annotations.Nullable;
29+
2830
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2931
import org.springframework.boot.context.properties.PropertyMapper;
3032
import org.springframework.boot.security.saml2.autoconfigure.Saml2RelyingPartyProperties.AssertingParty;
@@ -169,11 +171,12 @@ private Saml2X509Credential asVerificationCredential(Verification.Credential pro
169171
Saml2X509Credential.Saml2X509CredentialType.VERIFICATION);
170172
}
171173

172-
private RSAPrivateKey readPrivateKey(Resource location) {
174+
private RSAPrivateKey readPrivateKey(@Nullable Resource location) {
173175
Assert.state(location != null, "No private key location specified");
174176
Assert.state(location.exists(), () -> "Private key location '" + location + "' does not exist");
175177
try (InputStream inputStream = location.getInputStream()) {
176178
PemContent pemContent = PemContent.load(inputStream);
179+
Assert.state(pemContent != null, "'pemContent' must not be null");
177180
PrivateKey privateKey = pemContent.getPrivateKey();
178181
Assert.state(privateKey instanceof RSAPrivateKey,
179182
() -> "PrivateKey in resource '" + location + "' must be an RSAPrivateKey");
@@ -184,12 +187,14 @@ private RSAPrivateKey readPrivateKey(Resource location) {
184187
}
185188
}
186189

187-
private X509Certificate readCertificate(Resource location) {
190+
private X509Certificate readCertificate(@Nullable Resource location) {
188191
Assert.state(location != null, "No certificate location specified");
189192
Assert.state(location.exists(), () -> "Certificate location '" + location + "' does not exist");
190193
try (InputStream inputStream = location.getInputStream()) {
191194
PemContent pemContent = PemContent.load(inputStream);
195+
Assert.state(pemContent != null, "'pemContent' must not be null");
192196
List<X509Certificate> certificates = pemContent.getCertificates();
197+
Assert.state(certificates != null, "'certificates' must not be null");
193198
return certificates.get(0);
194199
}
195200
catch (Exception ex) {

module/spring-boot-security-saml2/src/main/java/org/springframework/boot/security/saml2/autoconfigure/package-info.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,7 @@
1717
/**
1818
* Auto-configuration for Spring Security's SAML 2.0.
1919
*/
20+
@NullMarked
2021
package org.springframework.boot.security.saml2.autoconfigure;
22+
23+
import org.jspecify.annotations.NullMarked;

0 commit comments

Comments
 (0)