From e528923878094e4ee58c25d9b82e67821fe3e515 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Dec 2024 03:08:32 +0000 Subject: [PATCH 01/87] Bump io.projectreactor:reactor-bom from 2023.0.12 to 2023.0.13 Bumps [io.projectreactor:reactor-bom](https://github.com/reactor/reactor) from 2023.0.12 to 2023.0.13. - [Release notes](https://github.com/reactor/reactor/releases) - [Commits](https://github.com/reactor/reactor/compare/2023.0.12...2023.0.13) --- updated-dependencies: - dependency-name: io.projectreactor:reactor-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1f4477c3364..a4dc106d863 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -28,7 +28,7 @@ com-unboundid-unboundid-ldapsdk = "com.unboundid:unboundid-ldapsdk:6.0.11" commons-collections = "commons-collections:commons-collections:3.2.2" io-micrometer-micrometer-observation = "io.micrometer:micrometer-observation:1.12.13" io-mockk = "io.mockk:mockk:1.13.13" -io-projectreactor-reactor-bom = "io.projectreactor:reactor-bom:2023.0.12" +io-projectreactor-reactor-bom = "io.projectreactor:reactor-bom:2023.0.13" io-rsocket-rsocket-bom = { module = "io.rsocket:rsocket-bom", version.ref = "io-rsocket" } io-spring-javaformat-spring-javaformat-checkstyle = { module = "io.spring.javaformat:spring-javaformat-checkstyle", version.ref = "io-spring-javaformat" } io-spring-javaformat-spring-javaformat-gradle-plugin = { module = "io.spring.javaformat:spring-javaformat-gradle-plugin", version.ref = "io-spring-javaformat" } From 85ca9e9a578808a2106ada77de154bc87b027278 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 16 Dec 2024 15:23:29 +0000 Subject: [PATCH 02/87] Release 6.3.6 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 2b893bd4417..0af50ab2e5c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ springBootVersion=3.1.1 -version=6.3.6-SNAPSHOT +version=6.3.6 samplesBranch=6.3.x org.gradle.jvmargs=-Xmx3g -XX:+HeapDumpOnOutOfMemoryError org.gradle.parallel=true From 87888d42fc7fd633accb745cdd8119c7679ca603 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 16 Dec 2024 15:50:41 +0000 Subject: [PATCH 03/87] Next development version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 0af50ab2e5c..cd27f59f3ea 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ springBootVersion=3.1.1 -version=6.3.6 +version=6.3.7-SNAPSHOT samplesBranch=6.3.x org.gradle.jvmargs=-Xmx3g -XX:+HeapDumpOnOutOfMemoryError org.gradle.parallel=true From ac0ca0cafcbb1f5e9230b2aadb83119103eb3b1c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 16 Dec 2024 16:36:38 +0000 Subject: [PATCH 04/87] Next development version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 463d88a1019..7ea67c6b3ac 100644 --- a/gradle.properties +++ b/gradle.properties @@ -14,7 +14,7 @@ # limitations under the License. # springBootVersion=3.3.3 -version=6.4.2 +version=6.4.3-SNAPSHOT samplesBranch=main org.gradle.jvmargs=-Xmx3g -XX:+HeapDumpOnOutOfMemoryError org.gradle.parallel=true From bf6a2fab01d7f1e7622ddef424a456dc98d640e0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Dec 2024 17:12:57 +0000 Subject: [PATCH 05/87] Bump org.junit:junit-bom from 5.11.3 to 5.11.4 Bumps [org.junit:junit-bom](https://github.com/junit-team/junit5) from 5.11.3 to 5.11.4. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.11.3...r5.11.4) --- updated-dependencies: - dependency-name: org.junit:junit-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8e8404600aa..e79f42a258c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -75,7 +75,7 @@ org-hsqldb = "org.hsqldb:hsqldb:2.7.4" org-jetbrains-kotlin-kotlin-bom = { module = "org.jetbrains.kotlin:kotlin-bom", version.ref = "org-jetbrains-kotlin" } org-jetbrains-kotlin-kotlin-gradle-plugin = "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.25" org-jetbrains-kotlinx-kotlinx-coroutines-bom = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-bom", version.ref = "org-jetbrains-kotlinx" } -org-junit-junit-bom = "org.junit:junit-bom:5.11.3" +org-junit-junit-bom = "org.junit:junit-bom:5.11.4" org-mockito-mockito-bom = { module = "org.mockito:mockito-bom", version.ref = "org-mockito" } org-opensaml-opensaml-saml-api = { module = "org.opensaml:opensaml-saml-api", version.ref = "org-opensaml" } org-opensaml-opensaml-saml-impl = { module = "org.opensaml:opensaml-saml-impl", version.ref = "org-opensaml" } From 841c03fe3bdb9a50742c7265e12ddbf5234dfee1 Mon Sep 17 00:00:00 2001 From: Josh Cummings <3627351+jzheaux@users.noreply.github.com> Date: Tue, 17 Dec 2024 09:36:29 -0700 Subject: [PATCH 06/87] Add Serializable Compatilibity to Saml 2.0 Exceptions Issue gh-16276 --- ...ingSecurityCoreVersionSerializableTests.java | 7 +++++++ ...ork.security.saml2.Saml2Exception.serialized | Bin 0 -> 16297 bytes ...tion.Saml2AuthenticationException.serialized | Bin 0 -> 16678 bytes .../security/saml2/Saml2Exception.java | 7 ++++++- .../Saml2AuthenticationException.java | 7 ++++++- 5 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.saml2.Saml2Exception.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.saml2.provider.service.authentication.Saml2AuthenticationException.serialized diff --git a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java index cff442fffe8..ecc30bd446a 100644 --- a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java +++ b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java @@ -116,8 +116,11 @@ import org.springframework.security.oauth2.server.resource.authentication.BearerTokenAuthenticationToken; import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationToken; import org.springframework.security.oauth2.server.resource.introspection.OAuth2IntrospectionAuthenticatedPrincipal; +import org.springframework.security.saml2.Saml2Exception; +import org.springframework.security.saml2.core.Saml2Error; import org.springframework.security.saml2.provider.service.authentication.DefaultSaml2AuthenticatedPrincipal; import org.springframework.security.saml2.provider.service.authentication.Saml2Authentication; +import org.springframework.security.saml2.provider.service.authentication.Saml2AuthenticationException; import org.springframework.security.saml2.provider.service.authentication.Saml2PostAuthenticationRequest; import org.springframework.security.saml2.provider.service.authentication.Saml2RedirectAuthenticationRequest; import org.springframework.security.saml2.provider.service.authentication.TestSaml2Authentications; @@ -301,6 +304,10 @@ class SpringSecurityCoreVersionSerializableTests { (r) -> new LdapAuthority("USER", "username", Map.of("attribute", List.of("value1", "value2")))); // saml2-service-provider + generatorByClassName.put(Saml2AuthenticationException.class, + (r) -> new Saml2AuthenticationException(new Saml2Error("code", "descirption"), "message", + new IOException("fail"))); + generatorByClassName.put(Saml2Exception.class, (r) -> new Saml2Exception("message", new IOException("fail"))); generatorByClassName.put(DefaultSaml2AuthenticatedPrincipal.class, (r) -> TestSaml2Authentications.authentication().getPrincipal()); generatorByClassName.put(Saml2Authentication.class, diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.saml2.Saml2Exception.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.saml2.Saml2Exception.serialized new file mode 100644 index 0000000000000000000000000000000000000000..4fd752b76ff32c61363d4a88deaec496110dd86d GIT binary patch literal 16297 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 literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.saml2.provider.service.authentication.Saml2AuthenticationException.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.saml2.provider.service.authentication.Saml2AuthenticationException.serialized new file mode 100644 index 0000000000000000000000000000000000000000..f771882b3de39663ba2cce10cb968e40abb8bba0 GIT binary patch literal 16678 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 W1l%!3`Fw_Qeg3-zl({a^*uMY}4DY@G literal 0 HcmV?d00001 diff --git a/saml2/saml2-service-provider/src/main/java/org/springframework/security/saml2/Saml2Exception.java b/saml2/saml2-service-provider/src/main/java/org/springframework/security/saml2/Saml2Exception.java index dc4e6bb770d..3595dec00ae 100644 --- a/saml2/saml2-service-provider/src/main/java/org/springframework/security/saml2/Saml2Exception.java +++ b/saml2/saml2-service-provider/src/main/java/org/springframework/security/saml2/Saml2Exception.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,11 +16,16 @@ package org.springframework.security.saml2; +import java.io.Serial; + /** * @since 5.2 */ public class Saml2Exception extends RuntimeException { + @Serial + private static final long serialVersionUID = 6076252564189633016L; + public Saml2Exception(String message) { super(message); } diff --git a/saml2/saml2-service-provider/src/main/java/org/springframework/security/saml2/provider/service/authentication/Saml2AuthenticationException.java b/saml2/saml2-service-provider/src/main/java/org/springframework/security/saml2/provider/service/authentication/Saml2AuthenticationException.java index 6ee38c6d60a..36075ba0df1 100644 --- a/saml2/saml2-service-provider/src/main/java/org/springframework/security/saml2/provider/service/authentication/Saml2AuthenticationException.java +++ b/saml2/saml2-service-provider/src/main/java/org/springframework/security/saml2/provider/service/authentication/Saml2AuthenticationException.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2022 the original author or authors. + * Copyright 2002-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,8 @@ package org.springframework.security.saml2.provider.service.authentication; +import java.io.Serial; + import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; import org.springframework.security.saml2.core.Saml2Error; @@ -40,6 +42,9 @@ */ public class Saml2AuthenticationException extends AuthenticationException { + @Serial + private static final long serialVersionUID = -2996886630890949105L; + private final Saml2Error error; /** From 27c2a8ad11afa3ac9ae88a67d03d32ec6b3c1e9d Mon Sep 17 00:00:00 2001 From: Josh Cummings <3627351+jzheaux@users.noreply.github.com> Date: Tue, 17 Dec 2024 13:05:23 -0700 Subject: [PATCH 07/87] Add Serializable Compatibility to Web Authentication Exceptions Issue gh-16276 --- ...ingSecurityCoreVersionSerializableTests.java | 16 ++++++++++++++++ ...catedCredentialsNotFoundException.serialized | Bin 0 -> 16420 bytes ...n.rememberme.CookieTheftException.serialized | Bin 0 -> 10859 bytes ...rememberme.InvalidCookieException.serialized | Bin 0 -> 10861 bytes ...RememberMeAuthenticationException.serialized | Bin 0 -> 16357 bytes ...on.SessionAuthenticationException.serialized | Bin 0 -> 10753 bytes ...ication.www.NonceExpiredException.serialized | Bin 0 -> 16338 bytes ...thenticatedCredentialsNotFoundException.java | 7 ++++++- .../rememberme/CookieTheftException.java | 7 ++++++- .../rememberme/InvalidCookieException.java | 7 ++++++- .../RememberMeAuthenticationException.java | 7 ++++++- .../session/SessionAuthenticationException.java | 7 ++++++- .../www/NonceExpiredException.java | 5 +++++ 13 files changed, 51 insertions(+), 5 deletions(-) create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.authentication.preauth.PreAuthenticatedCredentialsNotFoundException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.authentication.rememberme.CookieTheftException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.authentication.rememberme.InvalidCookieException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.authentication.session.SessionAuthenticationException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.authentication.www.NonceExpiredException.serialized diff --git a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java index ecc30bd446a..5072da9f5c4 100644 --- a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java +++ b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java @@ -128,6 +128,12 @@ import org.springframework.security.saml2.provider.service.authentication.TestSaml2RedirectAuthenticationRequests; import org.springframework.security.web.authentication.WebAuthenticationDetails; import org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken; +import org.springframework.security.web.authentication.preauth.PreAuthenticatedCredentialsNotFoundException; +import org.springframework.security.web.authentication.rememberme.CookieTheftException; +import org.springframework.security.web.authentication.rememberme.InvalidCookieException; +import org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationException; +import org.springframework.security.web.authentication.session.SessionAuthenticationException; +import org.springframework.security.web.authentication.www.NonceExpiredException; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; @@ -328,6 +334,16 @@ class SpringSecurityCoreVersionSerializableTests { token.setDetails(details); return token; }); + generatorByClassName.put(PreAuthenticatedCredentialsNotFoundException.class, + (r) -> new PreAuthenticatedCredentialsNotFoundException("message", new IOException("fail"))); + generatorByClassName.put(CookieTheftException.class, (r) -> new CookieTheftException("message")); + generatorByClassName.put(InvalidCookieException.class, (r) -> new InvalidCookieException("message")); + generatorByClassName.put(RememberMeAuthenticationException.class, + (r) -> new RememberMeAuthenticationException("message", new IOException("fail"))); + generatorByClassName.put(SessionAuthenticationException.class, + (r) -> new SessionAuthenticationException("message")); + generatorByClassName.put(NonceExpiredException.class, + (r) -> new NonceExpiredException("message", new IOException("fail"))); } @ParameterizedTest diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.authentication.preauth.PreAuthenticatedCredentialsNotFoundException.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.authentication.preauth.PreAuthenticatedCredentialsNotFoundException.serialized new file mode 100644 index 0000000000000000000000000000000000000000..6d7a94c295056eecba83fa32183d38fbf96d17f0 GIT binary patch literal 16420 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 literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.authentication.rememberme.InvalidCookieException.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.authentication.rememberme.InvalidCookieException.serialized new file mode 100644 index 0000000000000000000000000000000000000000..b4f3a5f6acc8e3b98177c470d27a6a4f79d5f1ea GIT binary patch literal 10861 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 RSScoVY9So1OMXX2{|6t~g*E^H literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.authentication.session.SessionAuthenticationException.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.authentication.session.SessionAuthenticationException.serialized new file mode 100644 index 0000000000000000000000000000000000000000..5b627fb9c7a5b8ec33d00805b3af38c331b5982b GIT binary patch literal 10753 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 literal 0 HcmV?d00001 diff --git a/web/src/main/java/org/springframework/security/web/authentication/preauth/PreAuthenticatedCredentialsNotFoundException.java b/web/src/main/java/org/springframework/security/web/authentication/preauth/PreAuthenticatedCredentialsNotFoundException.java index d18e7c0cc2b..57767d815c5 100644 --- a/web/src/main/java/org/springframework/security/web/authentication/preauth/PreAuthenticatedCredentialsNotFoundException.java +++ b/web/src/main/java/org/springframework/security/web/authentication/preauth/PreAuthenticatedCredentialsNotFoundException.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,10 +16,15 @@ package org.springframework.security.web.authentication.preauth; +import java.io.Serial; + import org.springframework.security.core.AuthenticationException; public class PreAuthenticatedCredentialsNotFoundException extends AuthenticationException { + @Serial + private static final long serialVersionUID = 2026209817833032728L; + public PreAuthenticatedCredentialsNotFoundException(String msg) { super(msg); } diff --git a/web/src/main/java/org/springframework/security/web/authentication/rememberme/CookieTheftException.java b/web/src/main/java/org/springframework/security/web/authentication/rememberme/CookieTheftException.java index dabaedd8954..3a477e0c504 100644 --- a/web/src/main/java/org/springframework/security/web/authentication/rememberme/CookieTheftException.java +++ b/web/src/main/java/org/springframework/security/web/authentication/rememberme/CookieTheftException.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,11 +16,16 @@ package org.springframework.security.web.authentication.rememberme; +import java.io.Serial; + /** * @author Luke Taylor */ public class CookieTheftException extends RememberMeAuthenticationException { + @Serial + private static final long serialVersionUID = -7215039140728554850L; + public CookieTheftException(String message) { super(message); } diff --git a/web/src/main/java/org/springframework/security/web/authentication/rememberme/InvalidCookieException.java b/web/src/main/java/org/springframework/security/web/authentication/rememberme/InvalidCookieException.java index 00668e06d88..d434bbc47b4 100644 --- a/web/src/main/java/org/springframework/security/web/authentication/rememberme/InvalidCookieException.java +++ b/web/src/main/java/org/springframework/security/web/authentication/rememberme/InvalidCookieException.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,8 @@ package org.springframework.security.web.authentication.rememberme; +import java.io.Serial; + /** * Exception thrown by a RememberMeServices implementation to indicate that a submitted * cookie is of an invalid format or has expired. @@ -24,6 +26,9 @@ */ public class InvalidCookieException extends RememberMeAuthenticationException { + @Serial + private static final long serialVersionUID = -7952247791921087125L; + public InvalidCookieException(String message) { super(message); } diff --git a/web/src/main/java/org/springframework/security/web/authentication/rememberme/RememberMeAuthenticationException.java b/web/src/main/java/org/springframework/security/web/authentication/rememberme/RememberMeAuthenticationException.java index dc727efa921..a1fc8c4ee89 100644 --- a/web/src/main/java/org/springframework/security/web/authentication/rememberme/RememberMeAuthenticationException.java +++ b/web/src/main/java/org/springframework/security/web/authentication/rememberme/RememberMeAuthenticationException.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,8 @@ package org.springframework.security.web.authentication.rememberme; +import java.io.Serial; + import org.springframework.security.core.AuthenticationException; /** @@ -27,6 +29,9 @@ */ public class RememberMeAuthenticationException extends AuthenticationException { + @Serial + private static final long serialVersionUID = 7028526952590057426L; + /** * Constructs a {@code RememberMeAuthenticationException} with the specified message * and root cause. diff --git a/web/src/main/java/org/springframework/security/web/authentication/session/SessionAuthenticationException.java b/web/src/main/java/org/springframework/security/web/authentication/session/SessionAuthenticationException.java index db1650b3a9e..6ec0835f758 100644 --- a/web/src/main/java/org/springframework/security/web/authentication/session/SessionAuthenticationException.java +++ b/web/src/main/java/org/springframework/security/web/authentication/session/SessionAuthenticationException.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2023 the original author or authors. + * Copyright 2002-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,8 @@ package org.springframework.security.web.authentication.session; +import java.io.Serial; + import org.springframework.security.core.AuthenticationException; /** @@ -31,6 +33,9 @@ */ public class SessionAuthenticationException extends AuthenticationException { + @Serial + private static final long serialVersionUID = -2359914603911936474L; + public SessionAuthenticationException(String msg) { super(msg); } diff --git a/web/src/main/java/org/springframework/security/web/authentication/www/NonceExpiredException.java b/web/src/main/java/org/springframework/security/web/authentication/www/NonceExpiredException.java index 8ac38137d03..6628a9e27a2 100644 --- a/web/src/main/java/org/springframework/security/web/authentication/www/NonceExpiredException.java +++ b/web/src/main/java/org/springframework/security/web/authentication/www/NonceExpiredException.java @@ -16,6 +16,8 @@ package org.springframework.security.web.authentication.www; +import java.io.Serial; + import org.springframework.security.core.AuthenticationException; /** @@ -25,6 +27,9 @@ */ public class NonceExpiredException extends AuthenticationException { + @Serial + private static final long serialVersionUID = -3487244679050681257L; + /** * Constructs a NonceExpiredException with the specified message. * @param msg the detail message From ce90b85945a63d0a7c840c6cba5ed4b7236d790f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Dec 2024 03:29:33 +0000 Subject: [PATCH 08/87] Bump ch.qos.logback:logback-classic from 1.5.12 to 1.5.13 Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.5.12 to 1.5.13. - [Commits](https://github.com/qos-ch/logback/commits) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c2be1c30ec8..39d83b9ee9a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -16,7 +16,7 @@ org-opensaml = "4.3.2" org-springframework = "6.1.16" [libraries] -ch-qos-logback-logback-classic = "ch.qos.logback:logback-classic:1.5.12" +ch-qos-logback-logback-classic = "ch.qos.logback:logback-classic:1.5.13" com-fasterxml-jackson-jackson-bom = "com.fasterxml.jackson:jackson-bom:2.17.3" com-google-inject-guice = "com.google.inject:guice:3.0" com-netflix-nebula-nebula-project-plugin = "com.netflix.nebula:nebula-project-plugin:8.2.0" From e188552ccbc0e07f21f6473208daf3aee7c6ef06 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Dec 2024 03:51:27 +0000 Subject: [PATCH 09/87] Bump org.hibernate.orm:hibernate-core from 6.6.3.Final to 6.6.4.Final Bumps [org.hibernate.orm:hibernate-core](https://github.com/hibernate/hibernate-orm) from 6.6.3.Final to 6.6.4.Final. - [Release notes](https://github.com/hibernate/hibernate-orm/releases) - [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.4/changelog.txt) - [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.3...6.6.4) --- updated-dependencies: - dependency-name: org.hibernate.orm:hibernate-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e79f42a258c..fc19a1a3a63 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -70,7 +70,7 @@ org-bouncycastle-bcprov-jdk15on = { module = "org.bouncycastle:bcprov-jdk18on", org-eclipse-jetty-jetty-server = { module = "org.eclipse.jetty:jetty-server", version.ref = "org-eclipse-jetty" } org-eclipse-jetty-jetty-servlet = { module = "org.eclipse.jetty:jetty-servlet", version.ref = "org-eclipse-jetty" } org-hamcrest = "org.hamcrest:hamcrest:2.2" -org-hibernate-orm-hibernate-core = "org.hibernate.orm:hibernate-core:6.6.3.Final" +org-hibernate-orm-hibernate-core = "org.hibernate.orm:hibernate-core:6.6.4.Final" org-hsqldb = "org.hsqldb:hsqldb:2.7.4" org-jetbrains-kotlin-kotlin-bom = { module = "org.jetbrains.kotlin:kotlin-bom", version.ref = "org-jetbrains-kotlin" } org-jetbrains-kotlin-kotlin-gradle-plugin = "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.25" From 4bc3693669a5719cb23fc4769a15682334ae62a1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Dec 2024 03:51:20 +0000 Subject: [PATCH 10/87] Bump ch.qos.logback:logback-classic from 1.5.12 to 1.5.13 Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.5.12 to 1.5.13. - [Commits](https://github.com/qos-ch/logback/commits) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index fc19a1a3a63..c45c80b4452 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -17,7 +17,7 @@ org-opensaml5 = "5.1.2" org-springframework = "6.2.1" [libraries] -ch-qos-logback-logback-classic = "ch.qos.logback:logback-classic:1.5.12" +ch-qos-logback-logback-classic = "ch.qos.logback:logback-classic:1.5.13" com-fasterxml-jackson-jackson-bom = "com.fasterxml.jackson:jackson-bom:2.18.2" com-google-inject-guice = "com.google.inject:guice:3.0" com-netflix-nebula-nebula-project-plugin = "com.netflix.nebula:nebula-project-plugin:8.2.0" From 7aafe2ed5ab654b5136a1764bdf86a5911ac2c63 Mon Sep 17 00:00:00 2001 From: Steven Williams Date: Thu, 14 Nov 2024 16:39:12 -0500 Subject: [PATCH 11/87] Set Saml2RelyingPartyInitiatedLogoutSuccessHandler#logoutRequestRepository Closes gh-16093 --- .../security/config/http/Saml2LogoutBeanDefinitionParser.java | 1 + 1 file changed, 1 insertion(+) diff --git a/config/src/main/java/org/springframework/security/config/http/Saml2LogoutBeanDefinitionParser.java b/config/src/main/java/org/springframework/security/config/http/Saml2LogoutBeanDefinitionParser.java index 5f894cf8d8f..545f0f06c67 100644 --- a/config/src/main/java/org/springframework/security/config/http/Saml2LogoutBeanDefinitionParser.java +++ b/config/src/main/java/org/springframework/security/config/http/Saml2LogoutBeanDefinitionParser.java @@ -147,6 +147,7 @@ public BeanDefinition parse(Element element, ParserContext pc) { BeanMetadataElement saml2LogoutRequestSuccessHandler = BeanDefinitionBuilder .rootBeanDefinition(Saml2RelyingPartyInitiatedLogoutSuccessHandler.class) .addConstructorArgValue(logoutRequestResolver) + .addPropertyValue("logoutRequestRepository", logoutRequestRepository) .getBeanDefinition(); this.logoutFilter = BeanDefinitionBuilder.rootBeanDefinition(LogoutFilter.class) .addConstructorArgValue(saml2LogoutRequestSuccessHandler) From 643a3f12064d41b9f00cb4ed0c8986e0366cad44 Mon Sep 17 00:00:00 2001 From: Josh Cummings <3627351+jzheaux@users.noreply.github.com> Date: Thu, 19 Dec 2024 08:49:07 -0700 Subject: [PATCH 12/87] Test Setting logoutRequestRepository Issue gh-16093 --- .../saml2/Saml2LogoutConfigurerTests.java | 1 + .../Saml2LogoutBeanDefinitionParserTests.java | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/config/src/test/java/org/springframework/security/config/annotation/web/configurers/saml2/Saml2LogoutConfigurerTests.java b/config/src/test/java/org/springframework/security/config/annotation/web/configurers/saml2/Saml2LogoutConfigurerTests.java index 187c0979a2a..8926f0092b7 100644 --- a/config/src/test/java/org/springframework/security/config/annotation/web/configurers/saml2/Saml2LogoutConfigurerTests.java +++ b/config/src/test/java/org/springframework/security/config/annotation/web/configurers/saml2/Saml2LogoutConfigurerTests.java @@ -484,6 +484,7 @@ public void saml2LogoutResponseWhenCustomLogoutResponseHandlerThenUses() throws verify(getBean(Saml2LogoutResponseValidator.class)).validate(any()); } + // gh-11363 @Test public void saml2LogoutWhenCustomLogoutRequestRepositoryThenUses() throws Exception { this.spring.register(Saml2LogoutComponentsConfig.class).autowire(); diff --git a/config/src/test/java/org/springframework/security/config/http/Saml2LogoutBeanDefinitionParserTests.java b/config/src/test/java/org/springframework/security/config/http/Saml2LogoutBeanDefinitionParserTests.java index 152525d4a20..d51349440a5 100644 --- a/config/src/test/java/org/springframework/security/config/http/Saml2LogoutBeanDefinitionParserTests.java +++ b/config/src/test/java/org/springframework/security/config/http/Saml2LogoutBeanDefinitionParserTests.java @@ -63,6 +63,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.hamcrest.Matchers.containsString; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.verify; @@ -380,6 +381,22 @@ public void saml2LogoutResponseWhenCustomLogoutResponseHandlerThenUses() throws verify(getBean(Saml2LogoutResponseValidator.class)).validate(any()); } + // gh-11363 + @Test + public void saml2LogoutWhenCustomLogoutRequestRepositoryThenUses() throws Exception { + this.spring.configLocations(this.xml("CustomComponents")).autowire(); + RelyingPartyRegistration registration = this.repository.findByRegistrationId("get"); + Saml2LogoutRequest logoutRequest = Saml2LogoutRequest.withRelyingPartyRegistration(registration) + .samlRequest(this.rpLogoutRequest) + .id(this.rpLogoutRequestId) + .relayState(this.rpLogoutRequestRelayState) + .parameters((params) -> params.put("Signature", this.rpLogoutRequestSignature)) + .build(); + given(getBean(Saml2LogoutRequestResolver.class).resolve(any(), any())).willReturn(logoutRequest); + this.mvc.perform(post("/logout").with(authentication(this.saml2User)).with(csrf())); + verify(getBean(Saml2LogoutRequestRepository.class)).saveLogoutRequest(eq(logoutRequest), any(), any()); + } + private T getBean(Class clazz) { return this.spring.getContext().getBean(clazz); } From 15faf0f6211b054055d6b98c4d4ad3b4b16d0761 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 20 Dec 2024 03:34:59 +0000 Subject: [PATCH 13/87] Bump ch.qos.logback:logback-classic from 1.5.13 to 1.5.14 Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.5.13 to 1.5.14. - [Commits](https://github.com/qos-ch/logback/compare/v_1.5.13...v_1.5.14) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 39d83b9ee9a..62d2851612e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -16,7 +16,7 @@ org-opensaml = "4.3.2" org-springframework = "6.1.16" [libraries] -ch-qos-logback-logback-classic = "ch.qos.logback:logback-classic:1.5.13" +ch-qos-logback-logback-classic = "ch.qos.logback:logback-classic:1.5.14" com-fasterxml-jackson-jackson-bom = "com.fasterxml.jackson:jackson-bom:2.17.3" com-google-inject-guice = "com.google.inject:guice:3.0" com-netflix-nebula-nebula-project-plugin = "com.netflix.nebula:nebula-project-plugin:8.2.0" From e63b031b9b1815096de56034dd1e7b8902684e33 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 20 Dec 2024 03:46:22 +0000 Subject: [PATCH 14/87] Bump ch.qos.logback:logback-classic from 1.5.13 to 1.5.14 Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.5.13 to 1.5.14. - [Commits](https://github.com/qos-ch/logback/compare/v_1.5.13...v_1.5.14) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c45c80b4452..de4de91e0e7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -17,7 +17,7 @@ org-opensaml5 = "5.1.2" org-springframework = "6.2.1" [libraries] -ch-qos-logback-logback-classic = "ch.qos.logback:logback-classic:1.5.13" +ch-qos-logback-logback-classic = "ch.qos.logback:logback-classic:1.5.14" com-fasterxml-jackson-jackson-bom = "com.fasterxml.jackson:jackson-bom:2.18.2" com-google-inject-guice = "com.google.inject:guice:3.0" com-netflix-nebula-nebula-project-plugin = "com.netflix.nebula:nebula-project-plugin:8.2.0" From 431a60d7f2e86f14bc62b4387436d9f381f64d72 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2024 03:31:13 +0000 Subject: [PATCH 15/87] Bump io.mockk:mockk from 1.13.13 to 1.13.14 Bumps [io.mockk:mockk](https://github.com/mockk/mockk) from 1.13.13 to 1.13.14. - [Release notes](https://github.com/mockk/mockk/releases) - [Commits](https://github.com/mockk/mockk/compare/1.13.13...1.13.14) --- updated-dependencies: - dependency-name: io.mockk:mockk dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index de4de91e0e7..859af3d2280 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -29,7 +29,7 @@ com-unboundid-unboundid-ldapsdk = "com.unboundid:unboundid-ldapsdk:6.0.11" com-unboundid-unboundid-ldapsdk7 = "com.unboundid:unboundid-ldapsdk:7.0.1" commons-collections = "commons-collections:commons-collections:3.2.2" io-micrometer-micrometer-observation = "io.micrometer:micrometer-observation:1.14.2" -io-mockk = "io.mockk:mockk:1.13.13" +io-mockk = "io.mockk:mockk:1.13.14" io-projectreactor-reactor-bom = "io.projectreactor:reactor-bom:2023.0.13" io-rsocket-rsocket-bom = { module = "io.rsocket:rsocket-bom", version.ref = "io-rsocket" } io-spring-javaformat-spring-javaformat-checkstyle = { module = "io.spring.javaformat:spring-javaformat-checkstyle", version.ref = "io-spring-javaformat" } From 811d95ca769b20005025c381a82e064ba6a62b00 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2024 03:31:29 +0000 Subject: [PATCH 16/87] Bump ch.qos.logback:logback-classic from 1.5.14 to 1.5.15 Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.5.14 to 1.5.15. - [Commits](https://github.com/qos-ch/logback/compare/v_1.5.14...v_1.5.15) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 859af3d2280..fbd0a57098e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -17,7 +17,7 @@ org-opensaml5 = "5.1.2" org-springframework = "6.2.1" [libraries] -ch-qos-logback-logback-classic = "ch.qos.logback:logback-classic:1.5.14" +ch-qos-logback-logback-classic = "ch.qos.logback:logback-classic:1.5.15" com-fasterxml-jackson-jackson-bom = "com.fasterxml.jackson:jackson-bom:2.18.2" com-google-inject-guice = "com.google.inject:guice:3.0" com-netflix-nebula-nebula-project-plugin = "com.netflix.nebula:nebula-project-plugin:8.2.0" From d44923f64e6bd0a4b55294351c1abd7e9ef2fefd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2024 03:53:59 +0000 Subject: [PATCH 17/87] Bump io.mockk:mockk from 1.13.13 to 1.13.14 Bumps [io.mockk:mockk](https://github.com/mockk/mockk) from 1.13.13 to 1.13.14. - [Release notes](https://github.com/mockk/mockk/releases) - [Commits](https://github.com/mockk/mockk/compare/1.13.13...1.13.14) --- updated-dependencies: - dependency-name: io.mockk:mockk dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 62d2851612e..0716309a37a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -27,7 +27,7 @@ com-squareup-okhttp3-okhttp = { module = "com.squareup.okhttp3:okhttp", version. com-unboundid-unboundid-ldapsdk = "com.unboundid:unboundid-ldapsdk:6.0.11" commons-collections = "commons-collections:commons-collections:3.2.2" io-micrometer-micrometer-observation = "io.micrometer:micrometer-observation:1.12.13" -io-mockk = "io.mockk:mockk:1.13.13" +io-mockk = "io.mockk:mockk:1.13.14" io-projectreactor-reactor-bom = "io.projectreactor:reactor-bom:2023.0.13" io-rsocket-rsocket-bom = { module = "io.rsocket:rsocket-bom", version.ref = "io-rsocket" } io-spring-javaformat-spring-javaformat-checkstyle = { module = "io.spring.javaformat:spring-javaformat-checkstyle", version.ref = "io-spring-javaformat" } From 3ffda83ba1dd2c0a9afd4c609979012a3641744b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2024 03:54:35 +0000 Subject: [PATCH 18/87] Bump ch.qos.logback:logback-classic from 1.5.14 to 1.5.15 Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.5.14 to 1.5.15. - [Commits](https://github.com/qos-ch/logback/compare/v_1.5.14...v_1.5.15) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0716309a37a..4717cc078bd 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -16,7 +16,7 @@ org-opensaml = "4.3.2" org-springframework = "6.1.16" [libraries] -ch-qos-logback-logback-classic = "ch.qos.logback:logback-classic:1.5.14" +ch-qos-logback-logback-classic = "ch.qos.logback:logback-classic:1.5.15" com-fasterxml-jackson-jackson-bom = "com.fasterxml.jackson:jackson-bom:2.17.3" com-google-inject-guice = "com.google.inject:guice:3.0" com-netflix-nebula-nebula-project-plugin = "com.netflix.nebula:nebula-project-plugin:8.2.0" From beab697a8897d406fe0c2238dc44b0111d7982a6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Jan 2025 03:37:48 +0000 Subject: [PATCH 19/87] Bump com.webauthn4j:webauthn4j-core Bumps [com.webauthn4j:webauthn4j-core](https://github.com/webauthn4j/webauthn4j) from 0.28.3.RELEASE to 0.28.4.RELEASE. - [Release notes](https://github.com/webauthn4j/webauthn4j/releases) - [Changelog](https://github.com/webauthn4j/webauthn4j/blob/master/github-release-notes-generator.yml) - [Commits](https://github.com/webauthn4j/webauthn4j/compare/0.28.3.RELEASE...0.28.4.RELEASE) --- updated-dependencies: - dependency-name: com.webauthn4j:webauthn4j-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index fbd0a57098e..1edf7bf3ae6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -107,7 +107,7 @@ org-jfrog-buildinfo-build-info-extractor-gradle = "org.jfrog.buildinfo:build-inf org-sonarsource-scanner-gradle-sonarqube-gradle-plugin = "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.8.0.1969" org-instancio-instancio-junit = "org.instancio:instancio-junit:3.7.1" -webauthn4j-core = 'com.webauthn4j:webauthn4j-core:0.28.3.RELEASE' +webauthn4j-core = 'com.webauthn4j:webauthn4j-core:0.28.4.RELEASE' [plugins] From 92161aae2e7bc92f1fea3c843a69093a6909d6a0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Jan 2025 03:46:57 +0000 Subject: [PATCH 20/87] Bump ch.qos.logback:logback-classic from 1.5.15 to 1.5.16 Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.5.15 to 1.5.16. - [Commits](https://github.com/qos-ch/logback/compare/v_1.5.15...v_1.5.16) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4717cc078bd..d57cb46e8e3 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -16,7 +16,7 @@ org-opensaml = "4.3.2" org-springframework = "6.1.16" [libraries] -ch-qos-logback-logback-classic = "ch.qos.logback:logback-classic:1.5.15" +ch-qos-logback-logback-classic = "ch.qos.logback:logback-classic:1.5.16" com-fasterxml-jackson-jackson-bom = "com.fasterxml.jackson:jackson-bom:2.17.3" com-google-inject-guice = "com.google.inject:guice:3.0" com-netflix-nebula-nebula-project-plugin = "com.netflix.nebula:nebula-project-plugin:8.2.0" From 5fa960d18a921cedaa1de0adf603c8fa7dd02c7a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Jan 2025 03:48:00 +0000 Subject: [PATCH 21/87] Bump ch.qos.logback:logback-classic from 1.5.15 to 1.5.16 Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.5.15 to 1.5.16. - [Commits](https://github.com/qos-ch/logback/compare/v_1.5.15...v_1.5.16) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1edf7bf3ae6..bfa2ced63af 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -17,7 +17,7 @@ org-opensaml5 = "5.1.2" org-springframework = "6.2.1" [libraries] -ch-qos-logback-logback-classic = "ch.qos.logback:logback-classic:1.5.15" +ch-qos-logback-logback-classic = "ch.qos.logback:logback-classic:1.5.16" com-fasterxml-jackson-jackson-bom = "com.fasterxml.jackson:jackson-bom:2.18.2" com-google-inject-guice = "com.google.inject:guice:3.0" com-netflix-nebula-nebula-project-plugin = "com.netflix.nebula:nebula-project-plugin:8.2.0" From 2e9e5d0555c91805bb897833bee26a30520502cb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2025 04:01:08 +0000 Subject: [PATCH 22/87] Bump io.mockk:mockk from 1.13.14 to 1.13.16 Bumps [io.mockk:mockk](https://github.com/mockk/mockk) from 1.13.14 to 1.13.16. - [Release notes](https://github.com/mockk/mockk/releases) - [Commits](https://github.com/mockk/mockk/compare/1.13.14...1.13.16) --- updated-dependencies: - dependency-name: io.mockk:mockk dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d57cb46e8e3..1cbbd944645 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -27,7 +27,7 @@ com-squareup-okhttp3-okhttp = { module = "com.squareup.okhttp3:okhttp", version. com-unboundid-unboundid-ldapsdk = "com.unboundid:unboundid-ldapsdk:6.0.11" commons-collections = "commons-collections:commons-collections:3.2.2" io-micrometer-micrometer-observation = "io.micrometer:micrometer-observation:1.12.13" -io-mockk = "io.mockk:mockk:1.13.14" +io-mockk = "io.mockk:mockk:1.13.16" io-projectreactor-reactor-bom = "io.projectreactor:reactor-bom:2023.0.13" io-rsocket-rsocket-bom = { module = "io.rsocket:rsocket-bom", version.ref = "io-rsocket" } io-spring-javaformat-spring-javaformat-checkstyle = { module = "io.spring.javaformat:spring-javaformat-checkstyle", version.ref = "io-spring-javaformat" } From 882766e54fed3c62a4ab7f8e4f39f945d90905f4 Mon Sep 17 00:00:00 2001 From: Max Batischev Date: Sat, 11 Jan 2025 11:56:39 +0300 Subject: [PATCH 23/87] Fix Kotlin webAuthn {} Fixes the default configuration for WebAuthn Kotlin DSL Closes gh-16338 Signed-off-by: Max Batischev --- .../config/annotation/web/WebAuthnDsl.kt | 11 +++--- .../config/annotation/web/WebAuthnDslTests.kt | 39 ++++++++++++++++++- 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/config/src/main/kotlin/org/springframework/security/config/annotation/web/WebAuthnDsl.kt b/config/src/main/kotlin/org/springframework/security/config/annotation/web/WebAuthnDsl.kt index 1624817431e..c8296f367df 100644 --- a/config/src/main/kotlin/org/springframework/security/config/annotation/web/WebAuthnDsl.kt +++ b/config/src/main/kotlin/org/springframework/security/config/annotation/web/WebAuthnDsl.kt @@ -1,5 +1,5 @@ /* - * Copyright 2002-2021 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,6 +26,7 @@ import org.springframework.security.config.annotation.web.configurers.WebAuthnCo * @property the allowed origins * @since 6.4 * @author Rob Winch + * @author Max Batischev */ @SecurityMarker class WebAuthnDsl { @@ -34,10 +35,10 @@ class WebAuthnDsl { var allowedOrigins: Set? = null internal fun get(): (WebAuthnConfigurer) -> Unit { - return { webAuthn -> webAuthn - .rpId(rpId) - .rpName(rpName) - .allowedOrigins(allowedOrigins); + return { webAuthn -> + rpName?.also { webAuthn.rpName(rpName) } + rpId?.also { webAuthn.rpId(rpId) } + allowedOrigins?.also { webAuthn.allowedOrigins(allowedOrigins) } } } } diff --git a/config/src/test/kotlin/org/springframework/security/config/annotation/web/WebAuthnDslTests.kt b/config/src/test/kotlin/org/springframework/security/config/annotation/web/WebAuthnDslTests.kt index c0705e50bc2..023314cdc35 100644 --- a/config/src/test/kotlin/org/springframework/security/config/annotation/web/WebAuthnDslTests.kt +++ b/config/src/test/kotlin/org/springframework/security/config/annotation/web/WebAuthnDslTests.kt @@ -1,5 +1,5 @@ /* - * Copyright 2002-2022 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,7 @@ package org.springframework.security.config.annotation.web +import org.hamcrest.Matchers import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith import org.springframework.beans.factory.annotation.Autowired @@ -30,7 +31,9 @@ import org.springframework.security.core.userdetails.UserDetailsService import org.springframework.security.provisioning.InMemoryUserDetailsManager import org.springframework.security.web.SecurityFilterChain import org.springframework.test.web.servlet.MockMvc +import org.springframework.test.web.servlet.get import org.springframework.test.web.servlet.post +import org.springframework.test.web.servlet.result.MockMvcResultMatchers /** * Tests for [WebAuthnDsl] @@ -55,6 +58,40 @@ class WebAuthnDslTests { } } + @Test + fun `webauthn and formLogin configured with default registration page`() { + spring.register(DefaultWebauthnConfig::class.java).autowire() + + this.mockMvc.get("/login/webauthn.js") + .andExpect { + MockMvcResultMatchers.status().isOk + header { + string("content-type", "text/javascript;charset=UTF-8") + } + content { + string(Matchers.containsString("async function authenticate(")) + } + } + } + + @Configuration + @EnableWebSecurity + open class DefaultWebauthnConfig { + @Bean + open fun userDetailsService(): UserDetailsService = + InMemoryUserDetailsManager() + + + @Bean + open fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + http{ + formLogin { } + webAuthn { } + } + return http.build() + } + } + @Configuration @EnableWebSecurity open class WebauthnConfig { From decf4def95600075faacb7b06c48fcf841bb57f1 Mon Sep 17 00:00:00 2001 From: Max Batischev Date: Sat, 11 Jan 2025 12:02:46 +0300 Subject: [PATCH 24/87] Add Support disableDefaultRegistrationPage to WebAuthnDsl Closes gh-16395 Signed-off-by: Max Batischev --- .../config/annotation/web/WebAuthnDsl.kt | 3 ++ .../config/annotation/web/WebAuthnDslTests.kt | 36 +++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/config/src/main/kotlin/org/springframework/security/config/annotation/web/WebAuthnDsl.kt b/config/src/main/kotlin/org/springframework/security/config/annotation/web/WebAuthnDsl.kt index c8296f367df..f1a9600f000 100644 --- a/config/src/main/kotlin/org/springframework/security/config/annotation/web/WebAuthnDsl.kt +++ b/config/src/main/kotlin/org/springframework/security/config/annotation/web/WebAuthnDsl.kt @@ -24,6 +24,7 @@ import org.springframework.security.config.annotation.web.configurers.WebAuthnCo * @property rpName the relying party name * @property rpId the relying party id * @property the allowed origins + * @property disableDefaultRegistrationPage disable default webauthn registration page * @since 6.4 * @author Rob Winch * @author Max Batischev @@ -33,12 +34,14 @@ class WebAuthnDsl { var rpName: String? = null var rpId: String? = null var allowedOrigins: Set? = null + var disableDefaultRegistrationPage: Boolean? = false internal fun get(): (WebAuthnConfigurer) -> Unit { return { webAuthn -> rpName?.also { webAuthn.rpName(rpName) } rpId?.also { webAuthn.rpId(rpId) } allowedOrigins?.also { webAuthn.allowedOrigins(allowedOrigins) } + disableDefaultRegistrationPage?.also { webAuthn.disableDefaultRegistrationPage(disableDefaultRegistrationPage!!) } } } } diff --git a/config/src/test/kotlin/org/springframework/security/config/annotation/web/WebAuthnDslTests.kt b/config/src/test/kotlin/org/springframework/security/config/annotation/web/WebAuthnDslTests.kt index 023314cdc35..8bdee169f8a 100644 --- a/config/src/test/kotlin/org/springframework/security/config/annotation/web/WebAuthnDslTests.kt +++ b/config/src/test/kotlin/org/springframework/security/config/annotation/web/WebAuthnDslTests.kt @@ -74,6 +74,42 @@ class WebAuthnDslTests { } } + @Test + fun `webauthn and formLogin configured with disabled default registration page`() { + spring.register(FormLoginAndNoDefaultRegistrationPageConfiguration::class.java).autowire() + + this.mockMvc.get("/login/webauthn.js") + .andExpect { + MockMvcResultMatchers.status().isOk + header { + string("content-type", "text/javascript;charset=UTF-8") + } + content { + string(Matchers.containsString("async function authenticate(")) + } + } + } + + @Configuration + @EnableWebSecurity + open class FormLoginAndNoDefaultRegistrationPageConfiguration { + @Bean + open fun userDetailsService(): UserDetailsService = + InMemoryUserDetailsManager() + + + @Bean + open fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + http{ + formLogin { } + webAuthn { + disableDefaultRegistrationPage = true + } + } + return http.build() + } + } + @Configuration @EnableWebSecurity open class DefaultWebauthnConfig { From b9b29edbeb919ee08b17b37d772fa8869823bbdc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2025 03:28:36 +0000 Subject: [PATCH 25/87] Bump io.mockk:mockk from 1.13.14 to 1.13.16 Bumps [io.mockk:mockk](https://github.com/mockk/mockk) from 1.13.14 to 1.13.16. - [Release notes](https://github.com/mockk/mockk/releases) - [Commits](https://github.com/mockk/mockk/compare/1.13.14...1.13.16) --- updated-dependencies: - dependency-name: io.mockk:mockk dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index bfa2ced63af..42ff7b7fde7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -29,7 +29,7 @@ com-unboundid-unboundid-ldapsdk = "com.unboundid:unboundid-ldapsdk:6.0.11" com-unboundid-unboundid-ldapsdk7 = "com.unboundid:unboundid-ldapsdk:7.0.1" commons-collections = "commons-collections:commons-collections:3.2.2" io-micrometer-micrometer-observation = "io.micrometer:micrometer-observation:1.14.2" -io-mockk = "io.mockk:mockk:1.13.14" +io-mockk = "io.mockk:mockk:1.13.16" io-projectreactor-reactor-bom = "io.projectreactor:reactor-bom:2023.0.13" io-rsocket-rsocket-bom = { module = "io.rsocket:rsocket-bom", version.ref = "io-rsocket" } io-spring-javaformat-spring-javaformat-checkstyle = { module = "io.spring.javaformat:spring-javaformat-checkstyle", version.ref = "io-spring-javaformat" } From 5075869418058d4a8b91067b5e656b3e792e82d8 Mon Sep 17 00:00:00 2001 From: Toshiaki Maki Date: Thu, 26 Dec 2024 03:41:16 +0900 Subject: [PATCH 26/87] Fix for JdbcOneTimeTokenService cleanupExpiredTokens failing with PostgreSQL Closes gh-16344 --- .../security/authentication/ott/JdbcOneTimeTokenService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/springframework/security/authentication/ott/JdbcOneTimeTokenService.java b/core/src/main/java/org/springframework/security/authentication/ott/JdbcOneTimeTokenService.java index 014541373ad..4cf6753631b 100644 --- a/core/src/main/java/org/springframework/security/authentication/ott/JdbcOneTimeTokenService.java +++ b/core/src/main/java/org/springframework/security/authentication/ott/JdbcOneTimeTokenService.java @@ -190,7 +190,8 @@ private ThreadPoolTaskScheduler createTaskScheduler(String cleanupCron) { } public void cleanupExpiredTokens() { - List parameters = List.of(new SqlParameterValue(Types.TIMESTAMP, Instant.now())); + List parameters = List + .of(new SqlParameterValue(Types.TIMESTAMP, Timestamp.from(Instant.now()))); PreparedStatementSetter pss = new ArgumentPreparedStatementSetter(parameters.toArray()); int deletedCount = this.jdbcOperations.update(DELETE_ONE_TIME_TOKENS_BY_EXPIRY_TIME_QUERY, pss); if (this.logger.isDebugEnabled()) { From ca2c617946f56b77fd33fb895a2087d62d65cb59 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 Jan 2025 03:47:39 +0000 Subject: [PATCH 27/87] Bump io.micrometer:micrometer-observation from 1.14.2 to 1.14.3 Bumps [io.micrometer:micrometer-observation](https://github.com/micrometer-metrics/micrometer) from 1.14.2 to 1.14.3. - [Release notes](https://github.com/micrometer-metrics/micrometer/releases) - [Commits](https://github.com/micrometer-metrics/micrometer/compare/v1.14.2...v1.14.3) --- updated-dependencies: - dependency-name: io.micrometer:micrometer-observation dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 42ff7b7fde7..308b08868ba 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -28,7 +28,7 @@ com-squareup-okhttp3-okhttp = { module = "com.squareup.okhttp3:okhttp", version. com-unboundid-unboundid-ldapsdk = "com.unboundid:unboundid-ldapsdk:6.0.11" com-unboundid-unboundid-ldapsdk7 = "com.unboundid:unboundid-ldapsdk:7.0.1" commons-collections = "commons-collections:commons-collections:3.2.2" -io-micrometer-micrometer-observation = "io.micrometer:micrometer-observation:1.14.2" +io-micrometer-micrometer-observation = "io.micrometer:micrometer-observation:1.14.3" io-mockk = "io.mockk:mockk:1.13.16" io-projectreactor-reactor-bom = "io.projectreactor:reactor-bom:2023.0.13" io-rsocket-rsocket-bom = { module = "io.rsocket:rsocket-bom", version.ref = "io-rsocket" } From 6f379aa9074e629870fc84b2c2be606320aee035 Mon Sep 17 00:00:00 2001 From: Josh Cummings <3627351+jzheaux@users.noreply.github.com> Date: Tue, 14 Jan 2025 16:06:18 -0700 Subject: [PATCH 28/87] Add Serializable to Csrf Components Issue gh-16276 --- ...ingSecurityCoreVersionSerializableTests.java | 11 +++++++++++ ...k.security.web.csrf.CsrfException.serialized | Bin 0 -> 10718 bytes ...ecurity.web.csrf.DefaultCsrfToken.serialized | Bin 0 -> 172 bytes ...eb.csrf.InvalidCsrfTokenException.serialized | Bin 0 -> 10882 bytes ...eb.csrf.MissingCsrfTokenException.serialized | Bin 0 -> 10868 bytes ...ity.web.server.csrf.CsrfException.serialized | Bin 0 -> 10725 bytes ....web.server.csrf.DefaultCsrfToken.serialized | Bin 0 -> 179 bytes .../security/web/csrf/CsrfException.java | 6 +++++- .../csrf/CsrfTokenRequestAttributeHandler.java | 1 + .../security/web/csrf/DefaultCsrfToken.java | 6 +++++- .../web/csrf/InvalidCsrfTokenException.java | 6 +++++- .../web/csrf/LazyCsrfTokenRepository.java | 1 + .../security/web/server/csrf/CsrfException.java | 6 +++++- .../web/server/csrf/DefaultCsrfToken.java | 6 +++++- 14 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.csrf.CsrfException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.csrf.DefaultCsrfToken.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.csrf.InvalidCsrfTokenException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.csrf.MissingCsrfTokenException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.server.csrf.CsrfException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.server.csrf.DefaultCsrfToken.serialized diff --git a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java index 5072da9f5c4..aedbd7096c1 100644 --- a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java +++ b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java @@ -134,6 +134,10 @@ import org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationException; import org.springframework.security.web.authentication.session.SessionAuthenticationException; import org.springframework.security.web.authentication.www.NonceExpiredException; +import org.springframework.security.web.csrf.CsrfException; +import org.springframework.security.web.csrf.DefaultCsrfToken; +import org.springframework.security.web.csrf.InvalidCsrfTokenException; +import org.springframework.security.web.csrf.MissingCsrfTokenException; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; @@ -344,6 +348,13 @@ class SpringSecurityCoreVersionSerializableTests { (r) -> new SessionAuthenticationException("message")); generatorByClassName.put(NonceExpiredException.class, (r) -> new NonceExpiredException("message", new IOException("fail"))); + generatorByClassName.put(CsrfException.class, (r) -> new CsrfException("message")); + generatorByClassName.put(org.springframework.security.web.server.csrf.CsrfException.class, (r) -> new org.springframework.security.web.server.csrf.CsrfException("message")); + generatorByClassName.put(InvalidCsrfTokenException.class, (r) -> new InvalidCsrfTokenException(new DefaultCsrfToken("header", "parameter", "token"), "token")); + generatorByClassName.put(MissingCsrfTokenException.class, (r) -> new MissingCsrfTokenException("token")); + generatorByClassName.put(DefaultCsrfToken.class, (r) -> new DefaultCsrfToken("header", "parameter", "token")); + generatorByClassName.put(org.springframework.security.web.server.csrf.DefaultCsrfToken.class, (r) -> new org.springframework.security.web.server.csrf.DefaultCsrfToken("header", "parameter", "token")); + } @ParameterizedTest diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.csrf.CsrfException.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.csrf.CsrfException.serialized new file mode 100644 index 0000000000000000000000000000000000000000..55eddf9e9f0cc57d99e9e0d3087dcfdc91e76bc9 GIT binary patch literal 10718 zcmeGiTZ|k>vG;7B&zCrU;8*<2ITM>;d3^Ty86UQnyR&`f>@&A#6PyQ{o9)}1yV;rX zOz+*E6(WSgD^eaJC`b{CfFK?cNC{ZjLVO_{A@Ktr`QQVDgrZ21_&|JtWI|PUPfyRz z?A{(WUwA)yXS%Das;jE2x~k_VeFka|dtwZvfAHjN^)$o~eZ=g_jk^W?9;)N|sW zFYgt2Hcwl#mg!nv#T=`7%&AfZ_~z$3&vYNW{=NYGSOTaZet&1jiOt8i{w4!4J{9_N z)`Uynd-u@pV{^BDw}dPmA%MplbyHRibcMx2NpuLoDj z^JE1h%d3KVEsT*1;gl5B7YxGNw@2G^g^vVLBkQU%66?N8u6_%4KILMAWxkm<(Y zj^#SnQ0L<`Vj$yv?E{-AHqeS|RVT`p0UBnGZ5%oh1bne8fkSc-xn0G`QDo5Z0LHT& zAD$QuJ4vb?ejk~A+x zG%SIgxvB;3q4ogl} z04G@nu1f}XHDN&Ue%i9ZfEiiW(8IAKlFjZr$o zbRyintU^lhI#)OHri0&>JZ*2nQ!#LctAPvBl21zC2Xr(yltlQBKEz0;psE2Cd~P2AvkyGc(_NTQ9PM^1V3K-oWx5I1Q~fiJS6B)PN%RbDxcZ$5f>x4VpQ35&2yL;xE90MW7>YT>U)ui zG0+?n0s?Ef1h3${*ERG=t9npKNzjgEj^4RnQsM_2L20@cIN+O2%J-p3>ku{29!)WO z802k(41Es{1dUyi-0}dOC@t%hVmCCFtf?ubga+Sac#!hLfho)J4A}KfnX51XVq{11 z(l|p&dPL{u+ik3yQ4gc7ISz*_zs82@vIExL*d^D!f=4xESEuzFr-jXDuo;7ZrrRz<_A@;GQ>5F+@LgPXlTU7Gz&cv4)kET z;4F5k9@tHpnNl9><-x$8yzD!2^BTRnY@U(4p1NCJ5ziGyR!NEuUqPCd@ac?{+M*R( zxmsszfvSU+6RSh=qu8XZjPGkW`+V}QDCXndi`_g5OmF~39Tq8WVrvNT51n@@=zz9F*dP6H%oG#BD+en58YUQU$TO!LIDUrqlw-qTRAn^-zKf9uPk|e=osyU3!Z)hm zgOYwv$;rW|X*eAVTTEEh8GW$<9AAAMU~nOT*pnS!(`JiMGF%hDc< zzSs=#=z0?lk9+vxkst3O28yeir~PoqvZqFa$WV{Q=p;mE2zaU|inW48q<|qS`neL( z-v;!%GUx#hg_F5WFFFCmvWC%T>}O;{re7`bn|a88-X`(`#(tdsEo^cT-R3o&*INVK z-Sl1l8d{a_vrl71fYe{j=&8;9P3 z4L%oI0UYWEn$IAw13Qmp*hxG?;x-WJYfz!3vrwOb?4d-j)*vZ|3_XVv^3#S*b~6v? z!xXz+G3Ff5j&a~~XNJ#=S>jag9)6I61dI`Tf24r&c0TMf9RDsh-@~Sf7IElpY~I1< zXV^6O%z~~B9KVqR1PZ|3Utq(%QLdmCElouC%N%kbN9_F-Hg_i{hzN*e0bhI1fbOe> z+&5pcu=!#l)p&A3J58O4_h659w8{X8%m};1`5vF<;?owASajlo7_R9UM1F$Z&tdZg zY@XKvUd0~HWWvK2b$|tVcqIqJbsa;?)B#R?%RT_FD{cY#p;8?v5HWX-88?fF_^Pv8{vh!R6KBTf~F zMe44DZ;ck9anGcz=-ef^b-E}oov_luFYMIixFHLq5De5HjpC9LBgO*rIk%7>@r$A;N~4MQ zIWEA)18QLnHftH_79YqMy}imv5a?N0C9mq=<5fzkOCtu>Bfn`tdMAM%ujwyLuT+Cv zUWrJ_kCClSMq)h{HpLV>;A-^WKr#Pr^a5Ol&B|M#_+nJtXKrgYB!$0R#PeRX#D=Vg zoabWSh631*W-+pfV4cBUb6buf?5mX;VprXd5NV!2sNN(z@6O z;!~fPDBM3bA5{8Gk$W1*U1&)TOr<^_Qz(|L07^ne{0{pyxqDLI6Fi(ZC#Ij=_r!PY zYw?a8Heh}JfNAilhq;6{!9GidG_(ILFwMVTTiERJ!#D^*X!xJyk47JqGLl!RrzK&{ z)3xwIgBDu2s|*EHDG=Ez3#(8vIS&Og_%O{A^>6&ZN~cxfi^VWr=z}H+5NInWTMgnB zKQARqIe-lLXM4(KByVu3D?1(1;JNUBUSQh^R4W2hQ1UTwX0YvYan NAHMl#$dBql{XdTZ9fAM= literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.csrf.DefaultCsrfToken.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.csrf.DefaultCsrfToken.serialized new file mode 100644 index 0000000000000000000000000000000000000000..693e898c3136a9e65df47fdc39ca758e46cbb6bb GIT binary patch literal 172 zcmZ4UmVvdnh`}tsC|$3(peQphJ*_A)H?=&!C|j>MHMz7Xv!qh5JT*x#xwt4z&m}c2 zu{5W|8ORRF&rZ#YdcXaI{-WPknHZRT7`QT06H`)){D9g^7=(PX63Y_xa}x8?^@B@5 t=34tO@D?P33@?EwDrBf*VDw>NEdiMX=2R4vFt9;PDPiD*D=vYm0RXq3J!Jp@ literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.csrf.InvalidCsrfTokenException.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.csrf.InvalidCsrfTokenException.serialized new file mode 100644 index 0000000000000000000000000000000000000000..18f8a50a348f8192945f88a31a68885efa09c1ac GIT binary patch literal 10882 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 uE~Q~cmg1EtfP`dwa?2!lDzHIR9M<(O2LA literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.server.csrf.CsrfException.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.server.csrf.CsrfException.serialized new file mode 100644 index 0000000000000000000000000000000000000000..6556a08dde7b2047a4672d9548a33672217a0d56 GIT binary patch literal 10725 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 Qzt#JLH~$3r(QGjLA9Z*jUjP6A literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.server.csrf.DefaultCsrfToken.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.server.csrf.DefaultCsrfToken.serialized new file mode 100644 index 0000000000000000000000000000000000000000..9cff958c4907a45a8acbea834b1143808b70d1bc GIT binary patch literal 179 zcmZ4UmVvdnh`~0$C|$3(peQphJ*_A)H?=&!C|j>MHMz7Xv!qh5JT(c(DJn}X(n~Hb zO4D;mO-n4zDRBm}L-Mmz^H|&qw@6J;D`a9|_F>@4NKH&hE%F1JQo^s5oAXRL{T9_9Rs5e18WJ$BrvC csrfTokenSupplier; diff --git a/web/src/main/java/org/springframework/security/web/csrf/DefaultCsrfToken.java b/web/src/main/java/org/springframework/security/web/csrf/DefaultCsrfToken.java index 682be4b1dd4..122d95d1ce9 100644 --- a/web/src/main/java/org/springframework/security/web/csrf/DefaultCsrfToken.java +++ b/web/src/main/java/org/springframework/security/web/csrf/DefaultCsrfToken.java @@ -16,6 +16,8 @@ package org.springframework.security.web.csrf; +import java.io.Serial; + import org.springframework.util.Assert; /** @@ -24,9 +26,11 @@ * @author Rob Winch * @since 3.2 */ -@SuppressWarnings("serial") public final class DefaultCsrfToken implements CsrfToken { + @Serial + private static final long serialVersionUID = 6552658053267913685L; + private final String token; private final String parameterName; diff --git a/web/src/main/java/org/springframework/security/web/csrf/InvalidCsrfTokenException.java b/web/src/main/java/org/springframework/security/web/csrf/InvalidCsrfTokenException.java index 0c57e5a604d..bb4afac31d8 100644 --- a/web/src/main/java/org/springframework/security/web/csrf/InvalidCsrfTokenException.java +++ b/web/src/main/java/org/springframework/security/web/csrf/InvalidCsrfTokenException.java @@ -16,6 +16,8 @@ package org.springframework.security.web.csrf; +import java.io.Serial; + import jakarta.servlet.http.HttpServletRequest; /** @@ -25,9 +27,11 @@ * @author Rob Winch * @since 3.2 */ -@SuppressWarnings("serial") public class InvalidCsrfTokenException extends CsrfException { + @Serial + private static final long serialVersionUID = -7745955098435417418L; + /** * @param expectedAccessToken * @param actualAccessToken diff --git a/web/src/main/java/org/springframework/security/web/csrf/LazyCsrfTokenRepository.java b/web/src/main/java/org/springframework/security/web/csrf/LazyCsrfTokenRepository.java index 5a6a63f4bb0..a8326fa2a7d 100644 --- a/web/src/main/java/org/springframework/security/web/csrf/LazyCsrfTokenRepository.java +++ b/web/src/main/java/org/springframework/security/web/csrf/LazyCsrfTokenRepository.java @@ -159,6 +159,7 @@ public String toString() { } + @SuppressWarnings("serial") private static final class SaveOnAccessCsrfToken implements CsrfToken { private transient CsrfTokenRepository tokenRepository; diff --git a/web/src/main/java/org/springframework/security/web/server/csrf/CsrfException.java b/web/src/main/java/org/springframework/security/web/server/csrf/CsrfException.java index 631c5b7fdc0..bdb693e95ca 100644 --- a/web/src/main/java/org/springframework/security/web/server/csrf/CsrfException.java +++ b/web/src/main/java/org/springframework/security/web/server/csrf/CsrfException.java @@ -16,6 +16,8 @@ package org.springframework.security.web.server.csrf; +import java.io.Serial; + import org.springframework.security.access.AccessDeniedException; import org.springframework.security.web.csrf.CsrfToken; @@ -25,9 +27,11 @@ * @author Rob Winch * @since 3.2 */ -@SuppressWarnings("serial") public class CsrfException extends AccessDeniedException { + @Serial + private static final long serialVersionUID = -8209680716517631141L; + public CsrfException(String message) { super(message); } diff --git a/web/src/main/java/org/springframework/security/web/server/csrf/DefaultCsrfToken.java b/web/src/main/java/org/springframework/security/web/server/csrf/DefaultCsrfToken.java index eb49369e6fe..2a32018a5cb 100644 --- a/web/src/main/java/org/springframework/security/web/server/csrf/DefaultCsrfToken.java +++ b/web/src/main/java/org/springframework/security/web/server/csrf/DefaultCsrfToken.java @@ -16,6 +16,8 @@ package org.springframework.security.web.server.csrf; +import java.io.Serial; + import org.springframework.util.Assert; /** @@ -24,9 +26,11 @@ * @author Rob Winch * @since 5.0 */ -@SuppressWarnings("serial") public final class DefaultCsrfToken implements CsrfToken { + @Serial + private static final long serialVersionUID = 308340117851874929L; + private final String token; private final String parameterName; From feea103050d3273d35eae16f227853956552772c Mon Sep 17 00:00:00 2001 From: Josh Cummings <3627351+jzheaux@users.noreply.github.com> Date: Tue, 14 Jan 2025 16:28:53 -0700 Subject: [PATCH 29/87] Formatting Issue gh-16276 --- .../SpringSecurityCoreVersionSerializableTests.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java index aedbd7096c1..90140fcc2d3 100644 --- a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java +++ b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java @@ -349,11 +349,15 @@ class SpringSecurityCoreVersionSerializableTests { generatorByClassName.put(NonceExpiredException.class, (r) -> new NonceExpiredException("message", new IOException("fail"))); generatorByClassName.put(CsrfException.class, (r) -> new CsrfException("message")); - generatorByClassName.put(org.springframework.security.web.server.csrf.CsrfException.class, (r) -> new org.springframework.security.web.server.csrf.CsrfException("message")); - generatorByClassName.put(InvalidCsrfTokenException.class, (r) -> new InvalidCsrfTokenException(new DefaultCsrfToken("header", "parameter", "token"), "token")); + generatorByClassName.put(org.springframework.security.web.server.csrf.CsrfException.class, + (r) -> new org.springframework.security.web.server.csrf.CsrfException("message")); + generatorByClassName.put(InvalidCsrfTokenException.class, + (r) -> new InvalidCsrfTokenException(new DefaultCsrfToken("header", "parameter", "token"), "token")); generatorByClassName.put(MissingCsrfTokenException.class, (r) -> new MissingCsrfTokenException("token")); generatorByClassName.put(DefaultCsrfToken.class, (r) -> new DefaultCsrfToken("header", "parameter", "token")); - generatorByClassName.put(org.springframework.security.web.server.csrf.DefaultCsrfToken.class, (r) -> new org.springframework.security.web.server.csrf.DefaultCsrfToken("header", "parameter", "token")); + generatorByClassName.put(org.springframework.security.web.server.csrf.DefaultCsrfToken.class, + (r) -> new org.springframework.security.web.server.csrf.DefaultCsrfToken("header", "parameter", + "token")); } From 8735368d9ebce98df29b071d4746902ad9183932 Mon Sep 17 00:00:00 2001 From: Josh Cummings <3627351+jzheaux@users.noreply.github.com> Date: Tue, 14 Jan 2025 17:04:36 -0700 Subject: [PATCH 30/87] Don't Support Serialization of Jackson Modules Issu gh-16276 --- .../springframework/security/cas/jackson2/CasJackson2Module.java | 1 + .../security/jackson2/SecurityJackson2Modules.java | 1 + .../security/ldap/jackson2/LdapJackson2Module.java | 1 + .../oauth2/client/jackson2/OAuth2ClientJackson2Module.java | 1 + .../security/saml2/jackson2/Saml2Jackson2Module.java | 1 + .../springframework/security/web/jackson2/WebJackson2Module.java | 1 + .../security/web/jackson2/WebServletJackson2Module.java | 1 + .../security/web/server/jackson2/WebServerJackson2Module.java | 1 + .../security/web/webauthn/jackson/WebauthnJackson2Module.java | 1 + 9 files changed, 9 insertions(+) diff --git a/cas/src/main/java/org/springframework/security/cas/jackson2/CasJackson2Module.java b/cas/src/main/java/org/springframework/security/cas/jackson2/CasJackson2Module.java index b6c7c6f8fad..fad74fdb7b6 100644 --- a/cas/src/main/java/org/springframework/security/cas/jackson2/CasJackson2Module.java +++ b/cas/src/main/java/org/springframework/security/cas/jackson2/CasJackson2Module.java @@ -41,6 +41,7 @@ * @since 4.2 * @see org.springframework.security.jackson2.SecurityJackson2Modules */ +@SuppressWarnings("serial") public class CasJackson2Module extends SimpleModule { public CasJackson2Module() { diff --git a/core/src/main/java/org/springframework/security/jackson2/SecurityJackson2Modules.java b/core/src/main/java/org/springframework/security/jackson2/SecurityJackson2Modules.java index 974910bc912..5db1b2e5382 100644 --- a/core/src/main/java/org/springframework/security/jackson2/SecurityJackson2Modules.java +++ b/core/src/main/java/org/springframework/security/jackson2/SecurityJackson2Modules.java @@ -201,6 +201,7 @@ private static TypeResolverBuilder createAllowlis * * @author Rob Winch */ + @SuppressWarnings("serial") static class AllowlistTypeResolverBuilder extends ObjectMapper.DefaultTypeResolverBuilder { AllowlistTypeResolverBuilder(ObjectMapper.DefaultTyping defaultTyping) { diff --git a/ldap/src/main/java/org/springframework/security/ldap/jackson2/LdapJackson2Module.java b/ldap/src/main/java/org/springframework/security/ldap/jackson2/LdapJackson2Module.java index f84e8df6205..aaa4164da5f 100644 --- a/ldap/src/main/java/org/springframework/security/ldap/jackson2/LdapJackson2Module.java +++ b/ldap/src/main/java/org/springframework/security/ldap/jackson2/LdapJackson2Module.java @@ -46,6 +46,7 @@ * @since 5.7 * @see SecurityJackson2Modules */ +@SuppressWarnings("serial") public class LdapJackson2Module extends SimpleModule { public LdapJackson2Module() { diff --git a/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/jackson2/OAuth2ClientJackson2Module.java b/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/jackson2/OAuth2ClientJackson2Module.java index ba1eaacd2c7..30f1185c9ba 100644 --- a/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/jackson2/OAuth2ClientJackson2Module.java +++ b/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/jackson2/OAuth2ClientJackson2Module.java @@ -86,6 +86,7 @@ * @see OAuth2AuthenticationExceptionMixin * @see OAuth2ErrorMixin */ +@SuppressWarnings("serial") public class OAuth2ClientJackson2Module extends SimpleModule { public OAuth2ClientJackson2Module() { diff --git a/saml2/saml2-service-provider/src/main/java/org/springframework/security/saml2/jackson2/Saml2Jackson2Module.java b/saml2/saml2-service-provider/src/main/java/org/springframework/security/saml2/jackson2/Saml2Jackson2Module.java index 025ffc6b36b..3d99fc2cfa7 100644 --- a/saml2/saml2-service-provider/src/main/java/org/springframework/security/saml2/jackson2/Saml2Jackson2Module.java +++ b/saml2/saml2-service-provider/src/main/java/org/springframework/security/saml2/jackson2/Saml2Jackson2Module.java @@ -39,6 +39,7 @@ * @since 5.7 * @see SecurityJackson2Modules */ +@SuppressWarnings("serial") public class Saml2Jackson2Module extends SimpleModule { public Saml2Jackson2Module() { diff --git a/web/src/main/java/org/springframework/security/web/jackson2/WebJackson2Module.java b/web/src/main/java/org/springframework/security/web/jackson2/WebJackson2Module.java index a54a55a96de..87daedcc40d 100644 --- a/web/src/main/java/org/springframework/security/web/jackson2/WebJackson2Module.java +++ b/web/src/main/java/org/springframework/security/web/jackson2/WebJackson2Module.java @@ -40,6 +40,7 @@ * @since 4.2 * @see SecurityJackson2Modules */ +@SuppressWarnings("serial") public class WebJackson2Module extends SimpleModule { public WebJackson2Module() { diff --git a/web/src/main/java/org/springframework/security/web/jackson2/WebServletJackson2Module.java b/web/src/main/java/org/springframework/security/web/jackson2/WebServletJackson2Module.java index 70b098e4fed..b5fd4d0777c 100644 --- a/web/src/main/java/org/springframework/security/web/jackson2/WebServletJackson2Module.java +++ b/web/src/main/java/org/springframework/security/web/jackson2/WebServletJackson2Module.java @@ -44,6 +44,7 @@ * @since 5.1 * @see SecurityJackson2Modules */ +@SuppressWarnings("serial") public class WebServletJackson2Module extends SimpleModule { public WebServletJackson2Module() { diff --git a/web/src/main/java/org/springframework/security/web/server/jackson2/WebServerJackson2Module.java b/web/src/main/java/org/springframework/security/web/server/jackson2/WebServerJackson2Module.java index ceea54bdbc1..001a5accf4a 100644 --- a/web/src/main/java/org/springframework/security/web/server/jackson2/WebServerJackson2Module.java +++ b/web/src/main/java/org/springframework/security/web/server/jackson2/WebServerJackson2Module.java @@ -38,6 +38,7 @@ * @since 5.1 * @see SecurityJackson2Modules */ +@SuppressWarnings("serial") public class WebServerJackson2Module extends SimpleModule { private static final String NAME = WebServerJackson2Module.class.getName(); diff --git a/web/src/main/java/org/springframework/security/web/webauthn/jackson/WebauthnJackson2Module.java b/web/src/main/java/org/springframework/security/web/webauthn/jackson/WebauthnJackson2Module.java index 0fe386aecc4..97a1c8e1f46 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/jackson/WebauthnJackson2Module.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/jackson/WebauthnJackson2Module.java @@ -47,6 +47,7 @@ * @author Rob Winch * @since 6.4 */ +@SuppressWarnings("serial") public class WebauthnJackson2Module extends SimpleModule { /** From 8e59fa17194debb1b3e1029ffd569a9c7e15208a Mon Sep 17 00:00:00 2001 From: Josh Cummings <3627351+jzheaux@users.noreply.github.com> Date: Tue, 14 Jan 2025 17:35:33 -0700 Subject: [PATCH 31/87] Don't Support Serialization for Jackson (De)serializers Issue gh-16276 --- .../jackson/AttestationConveyancePreferenceSerializer.java | 1 + .../jackson/AuthenticationExtensionsClientInputSerializer.java | 1 + .../jackson/AuthenticationExtensionsClientInputsSerializer.java | 1 + .../AuthenticationExtensionsClientOutputsDeserializer.java | 1 + .../webauthn/jackson/AuthenticatorAttachmentDeserializer.java | 1 + .../web/webauthn/jackson/AuthenticatorAttachmentSerializer.java | 1 + .../web/webauthn/jackson/AuthenticatorTransportDeserializer.java | 1 + .../security/web/webauthn/jackson/BytesSerializer.java | 1 + .../webauthn/jackson/COSEAlgorithmIdentifierDeserializer.java | 1 + .../web/webauthn/jackson/COSEAlgorithmIdentifierSerializer.java | 1 + ...CredProtectAuthenticationExtensionsClientInputSerializer.java | 1 + .../security/web/webauthn/jackson/DurationSerializer.java | 1 + .../webauthn/jackson/PublicKeyCredentialTypeDeserializer.java | 1 + .../web/webauthn/jackson/PublicKeyCredentialTypeSerializer.java | 1 + .../web/webauthn/jackson/ResidentKeyRequirementSerializer.java | 1 + .../webauthn/jackson/UserVerificationRequirementSerializer.java | 1 + 16 files changed, 16 insertions(+) diff --git a/web/src/main/java/org/springframework/security/web/webauthn/jackson/AttestationConveyancePreferenceSerializer.java b/web/src/main/java/org/springframework/security/web/webauthn/jackson/AttestationConveyancePreferenceSerializer.java index af2c0a23f51..03624dbe22d 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/jackson/AttestationConveyancePreferenceSerializer.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/jackson/AttestationConveyancePreferenceSerializer.java @@ -30,6 +30,7 @@ * @author Rob Winch * @since 6.4 */ +@SuppressWarnings("serial") class AttestationConveyancePreferenceSerializer extends StdSerializer { AttestationConveyancePreferenceSerializer() { diff --git a/web/src/main/java/org/springframework/security/web/webauthn/jackson/AuthenticationExtensionsClientInputSerializer.java b/web/src/main/java/org/springframework/security/web/webauthn/jackson/AuthenticationExtensionsClientInputSerializer.java index 4d7ca1e38df..2746a0928b3 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/jackson/AuthenticationExtensionsClientInputSerializer.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/jackson/AuthenticationExtensionsClientInputSerializer.java @@ -30,6 +30,7 @@ * @author Rob Winch * @since 6.4 */ +@SuppressWarnings("serial") class AuthenticationExtensionsClientInputSerializer extends StdSerializer { /** diff --git a/web/src/main/java/org/springframework/security/web/webauthn/jackson/AuthenticationExtensionsClientInputsSerializer.java b/web/src/main/java/org/springframework/security/web/webauthn/jackson/AuthenticationExtensionsClientInputsSerializer.java index 8009f0f16f6..e6ad216c8c7 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/jackson/AuthenticationExtensionsClientInputsSerializer.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/jackson/AuthenticationExtensionsClientInputsSerializer.java @@ -31,6 +31,7 @@ * @author Rob Winch * @since 6.4 */ +@SuppressWarnings("serial") class AuthenticationExtensionsClientInputsSerializer extends StdSerializer { /** diff --git a/web/src/main/java/org/springframework/security/web/webauthn/jackson/AuthenticationExtensionsClientOutputsDeserializer.java b/web/src/main/java/org/springframework/security/web/webauthn/jackson/AuthenticationExtensionsClientOutputsDeserializer.java index 0cfd084936c..dc0d588c7cd 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/jackson/AuthenticationExtensionsClientOutputsDeserializer.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/jackson/AuthenticationExtensionsClientOutputsDeserializer.java @@ -39,6 +39,7 @@ * @author Rob Winch * @since 6.4 */ +@SuppressWarnings("serial") class AuthenticationExtensionsClientOutputsDeserializer extends StdDeserializer { private static final Log logger = LogFactory.getLog(AuthenticationExtensionsClientOutputsDeserializer.class); diff --git a/web/src/main/java/org/springframework/security/web/webauthn/jackson/AuthenticatorAttachmentDeserializer.java b/web/src/main/java/org/springframework/security/web/webauthn/jackson/AuthenticatorAttachmentDeserializer.java index 0c6b9c9e741..8263081ddc8 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/jackson/AuthenticatorAttachmentDeserializer.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/jackson/AuthenticatorAttachmentDeserializer.java @@ -31,6 +31,7 @@ * @author Rob Winch * @since 6.4 */ +@SuppressWarnings("serial") class AuthenticatorAttachmentDeserializer extends StdDeserializer { AuthenticatorAttachmentDeserializer() { diff --git a/web/src/main/java/org/springframework/security/web/webauthn/jackson/AuthenticatorAttachmentSerializer.java b/web/src/main/java/org/springframework/security/web/webauthn/jackson/AuthenticatorAttachmentSerializer.java index 67c1a2b9b3c..a6ea540716e 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/jackson/AuthenticatorAttachmentSerializer.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/jackson/AuthenticatorAttachmentSerializer.java @@ -30,6 +30,7 @@ * @author Rob Winch * @since 6.4 */ +@SuppressWarnings("serial") class AuthenticatorAttachmentSerializer extends StdSerializer { AuthenticatorAttachmentSerializer() { diff --git a/web/src/main/java/org/springframework/security/web/webauthn/jackson/AuthenticatorTransportDeserializer.java b/web/src/main/java/org/springframework/security/web/webauthn/jackson/AuthenticatorTransportDeserializer.java index 77085c43502..8cafd92aa96 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/jackson/AuthenticatorTransportDeserializer.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/jackson/AuthenticatorTransportDeserializer.java @@ -31,6 +31,7 @@ * @author Rob Winch * @since 6.4 */ +@SuppressWarnings("serial") class AuthenticatorTransportDeserializer extends StdDeserializer { AuthenticatorTransportDeserializer() { diff --git a/web/src/main/java/org/springframework/security/web/webauthn/jackson/BytesSerializer.java b/web/src/main/java/org/springframework/security/web/webauthn/jackson/BytesSerializer.java index b02b33eecb8..894cab4ed5a 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/jackson/BytesSerializer.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/jackson/BytesSerializer.java @@ -30,6 +30,7 @@ * @author Rob Winch * @since 6.4 */ +@SuppressWarnings("serial") class BytesSerializer extends StdSerializer { /** diff --git a/web/src/main/java/org/springframework/security/web/webauthn/jackson/COSEAlgorithmIdentifierDeserializer.java b/web/src/main/java/org/springframework/security/web/webauthn/jackson/COSEAlgorithmIdentifierDeserializer.java index 343b0bde1ce..ed1e6e48370 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/jackson/COSEAlgorithmIdentifierDeserializer.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/jackson/COSEAlgorithmIdentifierDeserializer.java @@ -31,6 +31,7 @@ * @author Rob Winch * @since 6.4 */ +@SuppressWarnings("serial") class COSEAlgorithmIdentifierDeserializer extends StdDeserializer { COSEAlgorithmIdentifierDeserializer() { diff --git a/web/src/main/java/org/springframework/security/web/webauthn/jackson/COSEAlgorithmIdentifierSerializer.java b/web/src/main/java/org/springframework/security/web/webauthn/jackson/COSEAlgorithmIdentifierSerializer.java index eb408569fa5..6cc3d844135 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/jackson/COSEAlgorithmIdentifierSerializer.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/jackson/COSEAlgorithmIdentifierSerializer.java @@ -30,6 +30,7 @@ * @author Rob Winch * @since 6.4 */ +@SuppressWarnings("serial") class COSEAlgorithmIdentifierSerializer extends StdSerializer { COSEAlgorithmIdentifierSerializer() { diff --git a/web/src/main/java/org/springframework/security/web/webauthn/jackson/CredProtectAuthenticationExtensionsClientInputSerializer.java b/web/src/main/java/org/springframework/security/web/webauthn/jackson/CredProtectAuthenticationExtensionsClientInputSerializer.java index b1cd17892d0..05619965668 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/jackson/CredProtectAuthenticationExtensionsClientInputSerializer.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/jackson/CredProtectAuthenticationExtensionsClientInputSerializer.java @@ -31,6 +31,7 @@ * * @author Rob Winch */ +@SuppressWarnings("serial") class CredProtectAuthenticationExtensionsClientInputSerializer extends StdSerializer { diff --git a/web/src/main/java/org/springframework/security/web/webauthn/jackson/DurationSerializer.java b/web/src/main/java/org/springframework/security/web/webauthn/jackson/DurationSerializer.java index 442acc5fd0d..f1a27e17b5e 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/jackson/DurationSerializer.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/jackson/DurationSerializer.java @@ -29,6 +29,7 @@ * @author Rob Winch * @since 6.4 */ +@SuppressWarnings("serial") class DurationSerializer extends StdSerializer { /** diff --git a/web/src/main/java/org/springframework/security/web/webauthn/jackson/PublicKeyCredentialTypeDeserializer.java b/web/src/main/java/org/springframework/security/web/webauthn/jackson/PublicKeyCredentialTypeDeserializer.java index b7709d41f2b..7640d7a366c 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/jackson/PublicKeyCredentialTypeDeserializer.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/jackson/PublicKeyCredentialTypeDeserializer.java @@ -31,6 +31,7 @@ * @author Rob Winch * @since 6.4 */ +@SuppressWarnings("serial") class PublicKeyCredentialTypeDeserializer extends StdDeserializer { /** diff --git a/web/src/main/java/org/springframework/security/web/webauthn/jackson/PublicKeyCredentialTypeSerializer.java b/web/src/main/java/org/springframework/security/web/webauthn/jackson/PublicKeyCredentialTypeSerializer.java index 06eb0bbbe6d..23319e366a3 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/jackson/PublicKeyCredentialTypeSerializer.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/jackson/PublicKeyCredentialTypeSerializer.java @@ -30,6 +30,7 @@ * @author Rob Winch * @since 6.4 */ +@SuppressWarnings("serial") class PublicKeyCredentialTypeSerializer extends StdSerializer { /** diff --git a/web/src/main/java/org/springframework/security/web/webauthn/jackson/ResidentKeyRequirementSerializer.java b/web/src/main/java/org/springframework/security/web/webauthn/jackson/ResidentKeyRequirementSerializer.java index 158e8627cde..31b85366d44 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/jackson/ResidentKeyRequirementSerializer.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/jackson/ResidentKeyRequirementSerializer.java @@ -30,6 +30,7 @@ * @author Rob Winch * @since 6.4 */ +@SuppressWarnings("serial") class ResidentKeyRequirementSerializer extends StdSerializer { /** diff --git a/web/src/main/java/org/springframework/security/web/webauthn/jackson/UserVerificationRequirementSerializer.java b/web/src/main/java/org/springframework/security/web/webauthn/jackson/UserVerificationRequirementSerializer.java index 1bb29904460..07a6184a96f 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/jackson/UserVerificationRequirementSerializer.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/jackson/UserVerificationRequirementSerializer.java @@ -30,6 +30,7 @@ * @author Rob Winch * @since 6.4 */ +@SuppressWarnings("serial") class UserVerificationRequirementSerializer extends StdSerializer { /** From 244fd2eb5126a65131c8f2424f024b29d5e8e796 Mon Sep 17 00:00:00 2001 From: Josh Cummings <3627351+jzheaux@users.noreply.github.com> Date: Tue, 14 Jan 2025 18:25:17 -0700 Subject: [PATCH 32/87] Support Serialization in Exceptions Issue gh-16276 --- ...gSecurityCoreVersionSerializableTests.java | 93 +++++++++++++++++- ...ty.access.AccessDeniedException.serialized | Bin 0 -> 16216 bytes ...s.AuthorizationServiceException.serialized | Bin 0 -> 16296 bytes ...ication.AccountExpiredException.serialized | Bin 0 -> 16371 bytes ...ionCredentialsNotFoundException.serialized | Bin 0 -> 16309 bytes ....AuthenticationServiceException.serialized | Bin 0 -> 16297 bytes ...ication.BadCredentialsException.serialized | Bin 0 -> 16290 bytes ...ion.CredentialsExpiredException.serialized | Bin 0 -> 16375 bytes ...uthentication.DisabledException.serialized | Bin 0 -> 16365 bytes ...fficientAuthenticationException.serialized | Bin 0 -> 16302 bytes ...lAuthenticationServiceException.serialized | Bin 0 -> 16394 bytes ....authentication.LockedException.serialized | Bin 0 -> 16363 bytes ...ation.ProviderNotFoundException.serialized | Bin 0 -> 10734 bytes ...tt.InvalidOneTimeTokenException.serialized | Bin 0 -> 10741 bytes ...rd.CompromisedPasswordException.serialized | Bin 0 -> 16304 bytes ...tails.UsernameNotFoundException.serialized | Bin 0 -> 16294 bytes ...ppolicy.PasswordPolicyException.serialized | Bin 0 -> 10970 bytes ...nt.ClientAuthorizationException.serialized | Bin 0 -> 16626 bytes ...tAuthorizationRequiredException.serialized | Bin 0 -> 11268 bytes ...e.OAuth2AuthenticationException.serialized | Bin 0 -> 16580 bytes ...re.OAuth2AuthorizationException.serialized | Bin 0 -> 16507 bytes ...rity.oauth2.jwt.BadJwtException.serialized | Bin 0 -> 16273 bytes ...tDecoderInitializationException.serialized | Bin 0 -> 16226 bytes ...oauth2.jwt.JwtEncodingException.serialized | Bin 0 -> 16280 bytes ...ecurity.oauth2.jwt.JwtException.serialized | Bin 0 -> 16205 bytes ...uth2.jwt.JwtValidationException.serialized | Bin 0 -> 11069 bytes ...rce.InvalidBearerTokenException.serialized | Bin 0 -> 16963 bytes ...pection.BadOpaqueTokenException.serialized | Bin 0 -> 16351 bytes ...on.OAuth2IntrospectionException.serialized | Bin 0 -> 16247 bytes ...rewall.RequestRejectedException.serialized | Bin 0 -> 10661 bytes ...ServerExchangeRejectedException.serialized | Bin 0 -> 10675 bytes .../access/AccessDeniedException.java | 5 + .../access/AuthorizationServiceException.java | 5 + .../AccountExpiredException.java | 5 + ...nticationCredentialsNotFoundException.java | 5 + .../AuthenticationServiceException.java | 5 + .../BadCredentialsException.java | 5 + .../CredentialsExpiredException.java | 5 + .../authentication/DisabledException.java | 5 + .../InsufficientAuthenticationException.java | 5 + ...nternalAuthenticationServiceException.java | 5 + .../authentication/LockedException.java | 5 + .../ProviderNotFoundException.java | 5 + .../ott/InvalidOneTimeTokenException.java | 5 + .../CompromisedPasswordException.java | 5 + .../AuthorizationDeniedException.java | 5 + .../UsernameNotFoundException.java | 5 + .../security/crypto/codec/Base64.java | 1 + ...ctiveDirectoryAuthenticationException.java | 1 + .../ldap/ppolicy/PasswordPolicyException.java | 5 + .../client/ClientAuthorizationException.java | 5 + .../ClientAuthorizationRequiredException.java | 5 + .../InvalidClientRegistrationIdException.java | 1 + .../core/OAuth2AuthenticationException.java | 5 + .../core/OAuth2AuthorizationException.java | 5 + .../security/oauth2/jwt/BadJwtException.java | 5 + .../JwtDecoderInitializationException.java | 5 + .../oauth2/jwt/JwtEncodingException.java | 5 + .../security/oauth2/jwt/JwtException.java | 5 + .../oauth2/jwt/JwtValidationException.java | 4 + .../resource/InvalidBearerTokenException.java | 5 + .../BadOpaqueTokenException.java | 5 + .../OAuth2IntrospectionException.java | 5 + .../firewall/RequestRejectedException.java | 5 + .../authentication/SwitchUserWebFilter.java | 1 + .../ServerExchangeRejectedException.java | 5 + 66 files changed, 249 insertions(+), 2 deletions(-) create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.access.AccessDeniedException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.access.AuthorizationServiceException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.AccountExpiredException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.AuthenticationCredentialsNotFoundException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.AuthenticationServiceException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.BadCredentialsException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.CredentialsExpiredException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.DisabledException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.InsufficientAuthenticationException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.InternalAuthenticationServiceException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.LockedException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.ProviderNotFoundException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.ott.InvalidOneTimeTokenException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.password.CompromisedPasswordException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.core.userdetails.UsernameNotFoundException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.ldap.ppolicy.PasswordPolicyException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.oauth2.client.ClientAuthorizationException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.oauth2.client.ClientAuthorizationRequiredException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.oauth2.core.OAuth2AuthenticationException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.oauth2.core.OAuth2AuthorizationException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.oauth2.jwt.BadJwtException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.oauth2.jwt.JwtDecoderInitializationException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.oauth2.jwt.JwtEncodingException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.oauth2.jwt.JwtException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.oauth2.jwt.JwtValidationException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.oauth2.server.resource.InvalidBearerTokenException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.oauth2.server.resource.introspection.BadOpaqueTokenException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.oauth2.server.resource.introspection.OAuth2IntrospectionException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.firewall.RequestRejectedException.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.server.firewall.ServerExchangeRejectedException.serialized diff --git a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java index 90140fcc2d3..407a055d428 100644 --- a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java +++ b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java @@ -54,15 +54,29 @@ import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider; import org.springframework.core.type.filter.AssignableTypeFilter; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.security.access.AuthorizationServiceException; import org.springframework.security.access.intercept.RunAsUserToken; import org.springframework.security.authentication.AbstractAuthenticationToken; +import org.springframework.security.authentication.AccountExpiredException; import org.springframework.security.authentication.AnonymousAuthenticationToken; +import org.springframework.security.authentication.AuthenticationCredentialsNotFoundException; +import org.springframework.security.authentication.AuthenticationServiceException; +import org.springframework.security.authentication.BadCredentialsException; +import org.springframework.security.authentication.CredentialsExpiredException; +import org.springframework.security.authentication.DisabledException; +import org.springframework.security.authentication.InsufficientAuthenticationException; +import org.springframework.security.authentication.InternalAuthenticationServiceException; +import org.springframework.security.authentication.LockedException; +import org.springframework.security.authentication.ProviderNotFoundException; import org.springframework.security.authentication.RememberMeAuthenticationToken; import org.springframework.security.authentication.TestAuthentication; import org.springframework.security.authentication.TestingAuthenticationToken; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.authentication.jaas.JaasAuthenticationToken; +import org.springframework.security.authentication.ott.InvalidOneTimeTokenException; import org.springframework.security.authentication.ott.OneTimeTokenAuthenticationToken; +import org.springframework.security.authentication.password.CompromisedPasswordException; import org.springframework.security.cas.authentication.CasAssertionAuthenticationToken; import org.springframework.security.cas.authentication.CasAuthenticationToken; import org.springframework.security.cas.authentication.CasServiceTicketAuthenticationToken; @@ -72,7 +86,12 @@ import org.springframework.security.core.session.ReactiveSessionInformation; import org.springframework.security.core.session.SessionInformation; import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.security.ldap.ppolicy.PasswordPolicyErrorStatus; +import org.springframework.security.ldap.ppolicy.PasswordPolicyException; import org.springframework.security.ldap.userdetails.LdapAuthority; +import org.springframework.security.oauth2.client.ClientAuthorizationException; +import org.springframework.security.oauth2.client.ClientAuthorizationRequiredException; import org.springframework.security.oauth2.client.OAuth2AuthorizedClient; import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken; import org.springframework.security.oauth2.client.authentication.OAuth2AuthorizationCodeAuthenticationToken; @@ -88,7 +107,10 @@ import org.springframework.security.oauth2.core.DefaultOAuth2AuthenticatedPrincipal; import org.springframework.security.oauth2.core.OAuth2AccessToken; import org.springframework.security.oauth2.core.OAuth2AuthenticatedPrincipal; +import org.springframework.security.oauth2.core.OAuth2AuthenticationException; +import org.springframework.security.oauth2.core.OAuth2AuthorizationException; import org.springframework.security.oauth2.core.OAuth2DeviceCode; +import org.springframework.security.oauth2.core.OAuth2Error; import org.springframework.security.oauth2.core.OAuth2RefreshToken; import org.springframework.security.oauth2.core.OAuth2UserCode; import org.springframework.security.oauth2.core.TestOAuth2AccessTokens; @@ -108,14 +130,22 @@ import org.springframework.security.oauth2.core.user.DefaultOAuth2User; import org.springframework.security.oauth2.core.user.OAuth2UserAuthority; import org.springframework.security.oauth2.core.user.TestOAuth2Users; +import org.springframework.security.oauth2.jwt.BadJwtException; import org.springframework.security.oauth2.jwt.Jwt; +import org.springframework.security.oauth2.jwt.JwtDecoderInitializationException; +import org.springframework.security.oauth2.jwt.JwtEncodingException; +import org.springframework.security.oauth2.jwt.JwtException; +import org.springframework.security.oauth2.jwt.JwtValidationException; import org.springframework.security.oauth2.jwt.TestJwts; import org.springframework.security.oauth2.server.resource.BearerTokenError; import org.springframework.security.oauth2.server.resource.BearerTokenErrors; +import org.springframework.security.oauth2.server.resource.InvalidBearerTokenException; import org.springframework.security.oauth2.server.resource.authentication.BearerTokenAuthentication; import org.springframework.security.oauth2.server.resource.authentication.BearerTokenAuthenticationToken; import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationToken; +import org.springframework.security.oauth2.server.resource.introspection.BadOpaqueTokenException; import org.springframework.security.oauth2.server.resource.introspection.OAuth2IntrospectionAuthenticatedPrincipal; +import org.springframework.security.oauth2.server.resource.introspection.OAuth2IntrospectionException; import org.springframework.security.saml2.Saml2Exception; import org.springframework.security.saml2.core.Saml2Error; import org.springframework.security.saml2.provider.service.authentication.DefaultSaml2AuthenticatedPrincipal; @@ -138,6 +168,8 @@ import org.springframework.security.web.csrf.DefaultCsrfToken; import org.springframework.security.web.csrf.InvalidCsrfTokenException; import org.springframework.security.web.csrf.MissingCsrfTokenException; +import org.springframework.security.web.firewall.RequestRejectedException; +import org.springframework.security.web.server.firewall.ServerExchangeRejectedException; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; @@ -193,6 +225,12 @@ class SpringSecurityCoreVersionSerializableTests { generatorByClassName.put(OidcUserAuthority.class, (r) -> new OidcUserAuthority(TestOidcIdTokens.idToken().build(), new OidcUserInfo(Map.of("claim", "value")), "claim")); + generatorByClassName.put(OAuth2AuthenticationException.class, + (r) -> new OAuth2AuthenticationException(new OAuth2Error("error", "description", "uri"), "message", + new RuntimeException())); + generatorByClassName.put(OAuth2AuthorizationException.class, + (r) -> new OAuth2AuthorizationException(new OAuth2Error("error", "description", "uri"), "message", + new RuntimeException())); // oauth2-client ClientRegistration.Builder clientRegistrationBuilder = TestClientRegistrations.clientRegistration(); @@ -231,6 +269,21 @@ class SpringSecurityCoreVersionSerializableTests { return new DefaultOAuth2AuthenticatedPrincipal(principal.getName(), principal.getAttributes(), (Collection) principal.getAuthorities()); }); + generatorByClassName.put(ClientAuthorizationException.class, + (r) -> new ClientAuthorizationException(new OAuth2Error("error", "description", "uri"), "id", "message", + new RuntimeException())); + generatorByClassName.put(ClientAuthorizationRequiredException.class, + (r) -> new ClientAuthorizationRequiredException("id")); + + // oauth2-jose + generatorByClassName.put(BadJwtException.class, (r) -> new BadJwtException("token", new RuntimeException())); + generatorByClassName.put(JwtDecoderInitializationException.class, + (r) -> new JwtDecoderInitializationException("message", new RuntimeException())); + generatorByClassName.put(JwtEncodingException.class, + (r) -> new JwtEncodingException("message", new RuntimeException())); + generatorByClassName.put(JwtException.class, (r) -> new JwtException("message", new RuntimeException())); + generatorByClassName.put(JwtValidationException.class, + (r) -> new JwtValidationException("message", List.of(new OAuth2Error("error", "description", "uri")))); // oauth2-jwt generatorByClassName.put(Jwt.class, (r) -> TestJwts.user()); @@ -262,6 +315,12 @@ class SpringSecurityCoreVersionSerializableTests { generatorByClassName.put(BearerTokenError.class, (r) -> BearerTokenErrors.invalidToken("invalid token")); generatorByClassName.put(OAuth2IntrospectionAuthenticatedPrincipal.class, (r) -> TestOAuth2AuthenticatedPrincipals.active()); + generatorByClassName.put(InvalidBearerTokenException.class, + (r) -> new InvalidBearerTokenException("description", new RuntimeException())); + generatorByClassName.put(BadOpaqueTokenException.class, + (r) -> new BadOpaqueTokenException("message", new RuntimeException())); + generatorByClassName.put(OAuth2IntrospectionException.class, + (r) -> new OAuth2IntrospectionException("message", new RuntimeException())); // core generatorByClassName.put(RunAsUserToken.class, (r) -> { @@ -287,7 +346,33 @@ class SpringSecurityCoreVersionSerializableTests { }); generatorByClassName.put(OneTimeTokenAuthenticationToken.class, (r) -> applyDetails(new OneTimeTokenAuthenticationToken("username", "token"))); - + generatorByClassName.put(AccessDeniedException.class, + (r) -> new AccessDeniedException("access denied", new RuntimeException())); + generatorByClassName.put(AuthorizationServiceException.class, + (r) -> new AuthorizationServiceException("access denied", new RuntimeException())); + generatorByClassName.put(AccountExpiredException.class, + (r) -> new AccountExpiredException("error", new RuntimeException())); + generatorByClassName.put(AuthenticationCredentialsNotFoundException.class, + (r) -> new AuthenticationCredentialsNotFoundException("error", new RuntimeException())); + generatorByClassName.put(AuthenticationServiceException.class, + (r) -> new AuthenticationServiceException("error", new RuntimeException())); + generatorByClassName.put(BadCredentialsException.class, + (r) -> new BadCredentialsException("error", new RuntimeException())); + generatorByClassName.put(CredentialsExpiredException.class, + (r) -> new CredentialsExpiredException("error", new RuntimeException())); + generatorByClassName.put(DisabledException.class, + (r) -> new DisabledException("error", new RuntimeException())); + generatorByClassName.put(InsufficientAuthenticationException.class, + (r) -> new InsufficientAuthenticationException("error", new RuntimeException())); + generatorByClassName.put(InternalAuthenticationServiceException.class, + (r) -> new InternalAuthenticationServiceException("error", new RuntimeException())); + generatorByClassName.put(LockedException.class, (r) -> new LockedException("error", new RuntimeException())); + generatorByClassName.put(ProviderNotFoundException.class, (r) -> new ProviderNotFoundException("error")); + generatorByClassName.put(InvalidOneTimeTokenException.class, (r) -> new InvalidOneTimeTokenException("error")); + generatorByClassName.put(CompromisedPasswordException.class, + (r) -> new CompromisedPasswordException("error", new RuntimeException())); + generatorByClassName.put(UsernameNotFoundException.class, + (r) -> new UsernameNotFoundException("error", new RuntimeException())); generatorByClassName.put(TestingAuthenticationToken.class, (r) -> applyDetails(new TestingAuthenticationToken("username", "password"))); @@ -312,6 +397,8 @@ class SpringSecurityCoreVersionSerializableTests { // ldap generatorByClassName.put(LdapAuthority.class, (r) -> new LdapAuthority("USER", "username", Map.of("attribute", List.of("value1", "value2")))); + generatorByClassName.put(PasswordPolicyException.class, + (r) -> new PasswordPolicyException(PasswordPolicyErrorStatus.INSUFFICIENT_PASSWORD_QUALITY)); // saml2-service-provider generatorByClassName.put(Saml2AuthenticationException.class, @@ -358,7 +445,9 @@ class SpringSecurityCoreVersionSerializableTests { generatorByClassName.put(org.springframework.security.web.server.csrf.DefaultCsrfToken.class, (r) -> new org.springframework.security.web.server.csrf.DefaultCsrfToken("header", "parameter", "token")); - + generatorByClassName.put(RequestRejectedException.class, (r) -> new RequestRejectedException("message")); + generatorByClassName.put(ServerExchangeRejectedException.class, + (r) -> new ServerExchangeRejectedException("message")); } @ParameterizedTest diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.access.AccessDeniedException.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.access.AccessDeniedException.serialized new file mode 100644 index 0000000000000000000000000000000000000000..61dae86206e8ad845035bf17e3679e5f8bdcf445 GIT binary patch literal 16216 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 a+87g6DiXP5l(fUz}~Yv&}P3=4QutbKc!q&-9+} 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 literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.AuthenticationCredentialsNotFoundException.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.AuthenticationCredentialsNotFoundException.serialized new file mode 100644 index 0000000000000000000000000000000000000000..4e99aa03653f7e2611ae861c9c6b74034f2da86a GIT binary patch literal 16309 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 E3uL)r=l}o! literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.CredentialsExpiredException.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.CredentialsExpiredException.serialized new file mode 100644 index 0000000000000000000000000000000000000000..0ec7355f62ce128c3f1ebc7a040842f646f2e98c GIT binary patch literal 16375 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 literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.DisabledException.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.DisabledException.serialized new file mode 100644 index 0000000000000000000000000000000000000000..71d58fa87c7b5d9e86dffb061032c87827b3be12 GIT binary patch literal 16365 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 literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.InsufficientAuthenticationException.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.InsufficientAuthenticationException.serialized new file mode 100644 index 0000000000000000000000000000000000000000..24e5a933fa91da5edb3342013788fe590a83f167 GIT binary patch literal 16302 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 F{{kS0XJG&U literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.InternalAuthenticationServiceException.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.InternalAuthenticationServiceException.serialized new file mode 100644 index 0000000000000000000000000000000000000000..3ce3a576f5ab7f6a2a2812580e442eea085a8b3e GIT binary patch literal 16394 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 V)z)jbHr?p|@mqg^{AfOy{}1ZzB!&P0 literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.ott.InvalidOneTimeTokenException.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.ott.InvalidOneTimeTokenException.serialized new file mode 100644 index 0000000000000000000000000000000000000000..72c49585259603b819e64ec594cc794a0bb1e2ab GIT binary patch literal 10741 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 R^UeMrzWHaUkLH58{{YZ3CPx4O literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.password.CompromisedPasswordException.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.password.CompromisedPasswordException.serialized new file mode 100644 index 0000000000000000000000000000000000000000..112bcf688cefca9b2539605e1565c4e074f2fd47 GIT binary patch literal 16304 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 POSoHOg#A_KcW~^#7iek{ literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.core.userdetails.UsernameNotFoundException.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.core.userdetails.UsernameNotFoundException.serialized new file mode 100644 index 0000000000000000000000000000000000000000..0272398b25f8c7a12dd7ceb3965312490e3b502b GIT binary patch literal 16294 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 GiT?tZcx4Iz literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.ldap.ppolicy.PasswordPolicyException.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.ldap.ppolicy.PasswordPolicyException.serialized new file mode 100644 index 0000000000000000000000000000000000000000..148433692c0d27a79087313a253636626a5f6af9 GIT binary patch literal 10970 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 literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.oauth2.client.ClientAuthorizationException.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.oauth2.client.ClientAuthorizationException.serialized new file mode 100644 index 0000000000000000000000000000000000000000..7566a0979b5914e20ac55ff060c153f557b6692f GIT binary patch literal 16626 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 Itj#O`54(EVrvLx| literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.oauth2.client.ClientAuthorizationRequiredException.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.oauth2.client.ClientAuthorizationRequiredException.serialized new file mode 100644 index 0000000000000000000000000000000000000000..836566955ab03aa2e820baddb9f0ee6444085250 GIT binary patch literal 11268 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 Nb;c)_fVk|~{{;Ya>hb^p literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.oauth2.core.OAuth2AuthenticationException.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.oauth2.core.OAuth2AuthenticationException.serialized new file mode 100644 index 0000000000000000000000000000000000000000..de67c73ec2284052941c142282a55672584e350b GIT binary patch literal 16580 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 b@1wsj&<&mR&kxAY3Ch*m1BCg<1%UEDW^>8< literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.oauth2.core.OAuth2AuthorizationException.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.oauth2.core.OAuth2AuthorizationException.serialized new file mode 100644 index 0000000000000000000000000000000000000000..b082c12d2829669619c4849cd6cad886765731c6 GIT binary patch literal 16507 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 Ezy4ZV-2eap literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.oauth2.jwt.JwtDecoderInitializationException.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.oauth2.jwt.JwtDecoderInitializationException.serialized new file mode 100644 index 0000000000000000000000000000000000000000..39a7ada3a10a89c346cff8085cd37d52e6dbf410 GIT binary patch literal 16226 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 literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.oauth2.jwt.JwtEncodingException.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.oauth2.jwt.JwtEncodingException.serialized new file mode 100644 index 0000000000000000000000000000000000000000..e0026470c333d3b18edb37ec7c1eb424ac89c3ec GIT binary patch literal 16280 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 Dvd><2 literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.oauth2.jwt.JwtException.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.oauth2.jwt.JwtException.serialized new file mode 100644 index 0000000000000000000000000000000000000000..ac27bf9f67af2e7a9a8f4e389017a889f30a70a5 GIT binary patch literal 16205 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 RW?)X>WQ~A@=Yjyz{4c^xnIHfF literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.oauth2.server.resource.InvalidBearerTokenException.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.oauth2.server.resource.InvalidBearerTokenException.serialized new file mode 100644 index 0000000000000000000000000000000000000000..e2cd7fbb9971580fabbd82a9678ebb6c066405d1 GIT binary patch literal 16963 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 I=t%p20eYfU%>V!Z literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.oauth2.server.resource.introspection.BadOpaqueTokenException.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.oauth2.server.resource.introspection.BadOpaqueTokenException.serialized new file mode 100644 index 0000000000000000000000000000000000000000..098c85e9bd64d38d794dc5d160a6df216a9f4c63 GIT binary patch literal 16351 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 literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.oauth2.server.resource.introspection.OAuth2IntrospectionException.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.oauth2.server.resource.introspection.OAuth2IntrospectionException.serialized new file mode 100644 index 0000000000000000000000000000000000000000..4c8b96b31edfa1f6966472685df1b8ea06986caa GIT binary patch literal 16247 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 literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.firewall.RequestRejectedException.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.firewall.RequestRejectedException.serialized new file mode 100644 index 0000000000000000000000000000000000000000..52e1faf545b6643fd232cd3de8f8ee32514a9334 GIT binary patch literal 10661 zcmeHNU2Gjk6`t!Pj$`sqQs=j6l1);Gx^dz(iR(0pV>^jc#|gepAZ;mH?;T&Sy?1xB zJJ&y@fJ9pmh>B7~A1YMwR}~}>pcWFuE2)rpfrmcu073{<35h43KnmfUnc3OdpL=~x z!V~escy{K@IcL6e=FH5Q`@_GJ6;Vje`eD_Kg3$4*lc80kbAC8uM%1o{4qGti=!7}x zgmlhwU2}}ysMCmz(P?TkS{a(RX}}!ct6cmZdF!7?_qGu-AChg;)~sc^mRB{$>K=1y zR1v=UsrK`oM_>G_ApCGbs3?AWXVqsXcP-A0YB%y7^7xhbj#K?n>r03t@#i(z%QF=Q#5O8yyY4V zBk%;yXg(+rQu;n4%d8+^HD|62)OMe^iLn>L7Y3Nw4^E}#o9J~%NKGZs~iLilH zT&p%wu?(;Jl$XiKiM!oU*)%3rLz*BN~>$&s>LAl!z;#Z-XoOAtQU6 z6G$C4g3GJXV>GI}OxNa^)aK-WrOgGQD~?-a|G-dI#gZ<(`9}dfDSdx)2^-)}o|%p6j!^>EySiP7gQG zsXuUrYk>=B$(pkFVV%vp3XvYH9c83lNY#i+HxX8jrEX%N)OL1;c)$Y+qc zv$Hm&9>R@DNqb})ETT=#3h>a8abcUre{R!|YfXcXr7YsP$nNtoN zKSO)UvEeYPZZ!kGi#rdV0=x2!QkRt?Hmc1Bk$zv{G=((>PRGI*6IFFZznme*PfsTp zT#O)&WPMAVDjw2Mr*SKqfwP-GhPQ{vnWgT6aZFcHfQ@>(Sk!WJcumcL zVXe+c6V@p^euZ zE13cKnev0ZoPd!}EYZwmxQ>DYQ>$`8b96Mk2-1_PP(G zn%9=7rtW^mAf2?}7B#rwSvAMjbw%#=95%n>Lb2ffk|%hD6EMPWgssG;cymSBdUV>w zSB%_w)14fXoN9bA@U!|?uAs0;zYZ`xn%JN}46OxB zWf`hghJ*y1wlF6Go4RV2=3NiB0Q812T7%sl4qpgC#ujb=0wD(yA<~a>1~o1~T;MoE z0!{KQU{~7IqG^xc7t^+6|5k{W{V5HD25cnY)>>c>)V{=GLM*;h1jrp=ygP?){{#SS z*(_d1a8bxMNh5aHey{)sNxz8sKe%iE7`uJ~3w$oL0yxwSG#)`-2X*%4)JY;k5;lC4k1-PqD~gP|~e|{qGbIfdR1fXISuPR0!0P z(L{E?C=drYV(TxlxHp_&M?fZv#M=8t^uR3Sf%}rh-4`!X*^?9cY3f9L5L>jPRgOU1 zjIddp@3A%;pSDoMk}odEVL|60?kCv%X)IpA;xjtItJuPoOmz61POzvB*{cLH{JhSg z>D2*FeJehIs4HFp`JqxBD3B8mj=3<4;Cw`B{xa6S0M{vTk?nU~T|AGmnHm0nqKq*8 zd1;^`^n_40ybo(%)Pd^77I;?V@1B_yd9w^pqgya!o*H$jYfmct9FqzR zE%BzClOmtHwikC43x7`v*OF~2FXCEt&z^z=KD?h&Q@o~$yFMhdFGHpa?zHl9@ko>2 zV!=P)g0Z*@MTuZ71&c`NHX(Qd`*^$%9P&5fRDxJs-4lLrFP(GPl$L}o^GmXNNy6AA zoFf^8wUm}|ioCnPcxn7(E@DK23NI{~mSUW)#1uQ5pdMJ5A(fNP|9XHs5t@hZGJU6GGYnCajT zcIt85kO@-Q3{)qL;*=62#vxjq27^09Z zd``HtlngBP>7BblgX7vl$!jnGFP?N>tOM~=pI9ioKQ``E_DqR;7Q~G<6$h>|zYt64 zuUG-3gpBwb)@$2z9|aOSS8*97yp*xRQY4^BkHET;iB(9MT!I7{ z{4mWE`EUGzm2UAWpX}p&7!=6{fr^}N)`?I2Je4fH6)?o8lmu2edw5iGD`r1;P_+XK zI2hSh*siRVf@J{&KBWQQTwr-2VzkzeziSc?^*nS7myM+#Se!_jXgR!#sRKVkbDl$k ztGW3Hz<9Rx`CDD@o_zbwKf?WJKA8UxwlNBF literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.server.firewall.ServerExchangeRejectedException.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.server.firewall.ServerExchangeRejectedException.serialized new file mode 100644 index 0000000000000000000000000000000000000000..33fb178f627ea0d576653525e8858b0c10a6d4eb GIT binary patch literal 10675 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 literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/springframework/security/access/AccessDeniedException.java b/core/src/main/java/org/springframework/security/access/AccessDeniedException.java index 3bf6ceac5a0..49efd9f689d 100644 --- a/core/src/main/java/org/springframework/security/access/AccessDeniedException.java +++ b/core/src/main/java/org/springframework/security/access/AccessDeniedException.java @@ -16,6 +16,8 @@ package org.springframework.security.access; +import java.io.Serial; + /** * Thrown if an {@link org.springframework.security.core.Authentication Authentication} * object does not hold a required authority. @@ -24,6 +26,9 @@ */ public class AccessDeniedException extends RuntimeException { + @Serial + private static final long serialVersionUID = 6395817500121599533L; + /** * Constructs an AccessDeniedException with the specified message. * @param msg the detail message diff --git a/core/src/main/java/org/springframework/security/access/AuthorizationServiceException.java b/core/src/main/java/org/springframework/security/access/AuthorizationServiceException.java index 6952be563a6..4320b0075ff 100644 --- a/core/src/main/java/org/springframework/security/access/AuthorizationServiceException.java +++ b/core/src/main/java/org/springframework/security/access/AuthorizationServiceException.java @@ -16,6 +16,8 @@ package org.springframework.security.access; +import java.io.Serial; + /** * Thrown if an authorization request could not be processed due to a system problem. *

@@ -26,6 +28,9 @@ */ public class AuthorizationServiceException extends AccessDeniedException { + @Serial + private static final long serialVersionUID = 4817857292041606900L; + /** * Constructs an AuthorizationServiceException with the specified * message. diff --git a/core/src/main/java/org/springframework/security/authentication/AccountExpiredException.java b/core/src/main/java/org/springframework/security/authentication/AccountExpiredException.java index e8ef659882e..1193bf52364 100644 --- a/core/src/main/java/org/springframework/security/authentication/AccountExpiredException.java +++ b/core/src/main/java/org/springframework/security/authentication/AccountExpiredException.java @@ -16,6 +16,8 @@ package org.springframework.security.authentication; +import java.io.Serial; + /** * Thrown if an authentication request is rejected because the account has expired. Makes * no assertion as to whether or not the credentials were valid. @@ -24,6 +26,9 @@ */ public class AccountExpiredException extends AccountStatusException { + @Serial + private static final long serialVersionUID = 3732869526329993353L; + /** * Constructs a AccountExpiredException with the specified message. * @param msg the detail message diff --git a/core/src/main/java/org/springframework/security/authentication/AuthenticationCredentialsNotFoundException.java b/core/src/main/java/org/springframework/security/authentication/AuthenticationCredentialsNotFoundException.java index 91b5d616d88..0ed92018e69 100644 --- a/core/src/main/java/org/springframework/security/authentication/AuthenticationCredentialsNotFoundException.java +++ b/core/src/main/java/org/springframework/security/authentication/AuthenticationCredentialsNotFoundException.java @@ -16,6 +16,8 @@ package org.springframework.security.authentication; +import java.io.Serial; + import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; @@ -28,6 +30,9 @@ */ public class AuthenticationCredentialsNotFoundException extends AuthenticationException { + @Serial + private static final long serialVersionUID = 4153580041526791384L; + /** * Constructs an AuthenticationCredentialsNotFoundException with the * specified message. diff --git a/core/src/main/java/org/springframework/security/authentication/AuthenticationServiceException.java b/core/src/main/java/org/springframework/security/authentication/AuthenticationServiceException.java index 69d7233bdf9..3bd076dfd86 100644 --- a/core/src/main/java/org/springframework/security/authentication/AuthenticationServiceException.java +++ b/core/src/main/java/org/springframework/security/authentication/AuthenticationServiceException.java @@ -16,6 +16,8 @@ package org.springframework.security.authentication; +import java.io.Serial; + import org.springframework.security.core.AuthenticationException; /** @@ -29,6 +31,9 @@ */ public class AuthenticationServiceException extends AuthenticationException { + @Serial + private static final long serialVersionUID = -1591626195291329340L; + /** * Constructs an AuthenticationServiceException with the specified * message. diff --git a/core/src/main/java/org/springframework/security/authentication/BadCredentialsException.java b/core/src/main/java/org/springframework/security/authentication/BadCredentialsException.java index e202ef7b5a1..bc759f5f7a3 100644 --- a/core/src/main/java/org/springframework/security/authentication/BadCredentialsException.java +++ b/core/src/main/java/org/springframework/security/authentication/BadCredentialsException.java @@ -16,6 +16,8 @@ package org.springframework.security.authentication; +import java.io.Serial; + import org.springframework.security.core.AuthenticationException; /** @@ -26,6 +28,9 @@ */ public class BadCredentialsException extends AuthenticationException { + @Serial + private static final long serialVersionUID = 2742216069043066973L; + /** * Constructs a BadCredentialsException with the specified message. * @param msg the detail message diff --git a/core/src/main/java/org/springframework/security/authentication/CredentialsExpiredException.java b/core/src/main/java/org/springframework/security/authentication/CredentialsExpiredException.java index 8e532169aed..04194177633 100644 --- a/core/src/main/java/org/springframework/security/authentication/CredentialsExpiredException.java +++ b/core/src/main/java/org/springframework/security/authentication/CredentialsExpiredException.java @@ -16,6 +16,8 @@ package org.springframework.security.authentication; +import java.io.Serial; + /** * Thrown if an authentication request is rejected because the account's credentials have * expired. Makes no assertion as to whether or not the credentials were valid. @@ -24,6 +26,9 @@ */ public class CredentialsExpiredException extends AccountStatusException { + @Serial + private static final long serialVersionUID = -3306615738048904753L; + /** * Constructs a CredentialsExpiredException with the specified message. * @param msg the detail message diff --git a/core/src/main/java/org/springframework/security/authentication/DisabledException.java b/core/src/main/java/org/springframework/security/authentication/DisabledException.java index 31a75ce0cc8..fba17185901 100644 --- a/core/src/main/java/org/springframework/security/authentication/DisabledException.java +++ b/core/src/main/java/org/springframework/security/authentication/DisabledException.java @@ -16,6 +16,8 @@ package org.springframework.security.authentication; +import java.io.Serial; + /** * Thrown if an authentication request is rejected because the account is disabled. Makes * no assertion as to whether or not the credentials were valid. @@ -24,6 +26,9 @@ */ public class DisabledException extends AccountStatusException { + @Serial + private static final long serialVersionUID = 2295984593872502361L; + /** * Constructs a DisabledException with the specified message. * @param msg the detail message diff --git a/core/src/main/java/org/springframework/security/authentication/InsufficientAuthenticationException.java b/core/src/main/java/org/springframework/security/authentication/InsufficientAuthenticationException.java index 0e072b527a1..f4759349277 100644 --- a/core/src/main/java/org/springframework/security/authentication/InsufficientAuthenticationException.java +++ b/core/src/main/java/org/springframework/security/authentication/InsufficientAuthenticationException.java @@ -16,6 +16,8 @@ package org.springframework.security.authentication; +import java.io.Serial; + import org.springframework.security.core.AuthenticationException; /** @@ -33,6 +35,9 @@ */ public class InsufficientAuthenticationException extends AuthenticationException { + @Serial + private static final long serialVersionUID = -5514084346181236128L; + /** * Constructs an InsufficientAuthenticationException with the specified * message. diff --git a/core/src/main/java/org/springframework/security/authentication/InternalAuthenticationServiceException.java b/core/src/main/java/org/springframework/security/authentication/InternalAuthenticationServiceException.java index 3037ebaaf08..de59b2d5efa 100644 --- a/core/src/main/java/org/springframework/security/authentication/InternalAuthenticationServiceException.java +++ b/core/src/main/java/org/springframework/security/authentication/InternalAuthenticationServiceException.java @@ -16,6 +16,8 @@ package org.springframework.security.authentication; +import java.io.Serial; + /** *

* Thrown if an authentication request could not be processed due to a system problem that @@ -37,6 +39,9 @@ */ public class InternalAuthenticationServiceException extends AuthenticationServiceException { + @Serial + private static final long serialVersionUID = -6029644854192497840L; + public InternalAuthenticationServiceException(String message, Throwable cause) { super(message, cause); } diff --git a/core/src/main/java/org/springframework/security/authentication/LockedException.java b/core/src/main/java/org/springframework/security/authentication/LockedException.java index 9b2272b08fd..5262fdb52e4 100644 --- a/core/src/main/java/org/springframework/security/authentication/LockedException.java +++ b/core/src/main/java/org/springframework/security/authentication/LockedException.java @@ -16,6 +16,8 @@ package org.springframework.security.authentication; +import java.io.Serial; + /** * Thrown if an authentication request is rejected because the account is locked. Makes no * assertion as to whether or not the credentials were valid. @@ -24,6 +26,9 @@ */ public class LockedException extends AccountStatusException { + @Serial + private static final long serialVersionUID = 548864198455046567L; + /** * Constructs a LockedException with the specified message. * @param msg the detail message. diff --git a/core/src/main/java/org/springframework/security/authentication/ProviderNotFoundException.java b/core/src/main/java/org/springframework/security/authentication/ProviderNotFoundException.java index 629a28e8c8c..870a6ea1f83 100644 --- a/core/src/main/java/org/springframework/security/authentication/ProviderNotFoundException.java +++ b/core/src/main/java/org/springframework/security/authentication/ProviderNotFoundException.java @@ -16,6 +16,8 @@ package org.springframework.security.authentication; +import java.io.Serial; + import org.springframework.security.core.AuthenticationException; /** @@ -27,6 +29,9 @@ */ public class ProviderNotFoundException extends AuthenticationException { + @Serial + private static final long serialVersionUID = 8107665253214447614L; + /** * Constructs a ProviderNotFoundException with the specified message. * @param msg the detail message diff --git a/core/src/main/java/org/springframework/security/authentication/ott/InvalidOneTimeTokenException.java b/core/src/main/java/org/springframework/security/authentication/ott/InvalidOneTimeTokenException.java index 03289f12b78..8ee8199cd09 100644 --- a/core/src/main/java/org/springframework/security/authentication/ott/InvalidOneTimeTokenException.java +++ b/core/src/main/java/org/springframework/security/authentication/ott/InvalidOneTimeTokenException.java @@ -16,6 +16,8 @@ package org.springframework.security.authentication.ott; +import java.io.Serial; + import org.springframework.security.core.AuthenticationException; /** @@ -26,6 +28,9 @@ */ public class InvalidOneTimeTokenException extends AuthenticationException { + @Serial + private static final long serialVersionUID = -3651018515682919943L; + public InvalidOneTimeTokenException(String msg) { super(msg); } diff --git a/core/src/main/java/org/springframework/security/authentication/password/CompromisedPasswordException.java b/core/src/main/java/org/springframework/security/authentication/password/CompromisedPasswordException.java index 672876164fb..04d042b96af 100644 --- a/core/src/main/java/org/springframework/security/authentication/password/CompromisedPasswordException.java +++ b/core/src/main/java/org/springframework/security/authentication/password/CompromisedPasswordException.java @@ -16,6 +16,8 @@ package org.springframework.security.authentication.password; +import java.io.Serial; + import org.springframework.security.core.AuthenticationException; /** @@ -26,6 +28,9 @@ */ public class CompromisedPasswordException extends AuthenticationException { + @Serial + private static final long serialVersionUID = -885858958297842864L; + public CompromisedPasswordException(String message) { super(message); } diff --git a/core/src/main/java/org/springframework/security/authorization/AuthorizationDeniedException.java b/core/src/main/java/org/springframework/security/authorization/AuthorizationDeniedException.java index fdcb1e70aa6..63385e1cbd1 100644 --- a/core/src/main/java/org/springframework/security/authorization/AuthorizationDeniedException.java +++ b/core/src/main/java/org/springframework/security/authorization/AuthorizationDeniedException.java @@ -16,6 +16,8 @@ package org.springframework.security.authorization; +import java.io.Serial; + import org.springframework.security.access.AccessDeniedException; import org.springframework.util.Assert; @@ -27,6 +29,9 @@ */ public class AuthorizationDeniedException extends AccessDeniedException implements AuthorizationResult { + @Serial + private static final long serialVersionUID = 3227305845919610459L; + private final AuthorizationResult result; public AuthorizationDeniedException(String msg, AuthorizationResult authorizationResult) { diff --git a/core/src/main/java/org/springframework/security/core/userdetails/UsernameNotFoundException.java b/core/src/main/java/org/springframework/security/core/userdetails/UsernameNotFoundException.java index 22c3c1d8e5f..d1d969dc262 100644 --- a/core/src/main/java/org/springframework/security/core/userdetails/UsernameNotFoundException.java +++ b/core/src/main/java/org/springframework/security/core/userdetails/UsernameNotFoundException.java @@ -16,6 +16,8 @@ package org.springframework.security.core.userdetails; +import java.io.Serial; + import org.springframework.security.core.AuthenticationException; /** @@ -26,6 +28,9 @@ */ public class UsernameNotFoundException extends AuthenticationException { + @Serial + private static final long serialVersionUID = 1410688585992297006L; + /** * Constructs a UsernameNotFoundException with the specified message. * @param msg the detail message. diff --git a/crypto/src/main/java/org/springframework/security/crypto/codec/Base64.java b/crypto/src/main/java/org/springframework/security/crypto/codec/Base64.java index d4afce73c18..b696c0c4bf2 100644 --- a/crypto/src/main/java/org/springframework/security/crypto/codec/Base64.java +++ b/crypto/src/main/java/org/springframework/security/crypto/codec/Base64.java @@ -617,6 +617,7 @@ else if (len < 4) { return out; } + @SuppressWarnings("serial") static class InvalidBase64CharacterException extends IllegalArgumentException { InvalidBase64CharacterException(String message) { diff --git a/ldap/src/main/java/org/springframework/security/ldap/authentication/ad/ActiveDirectoryAuthenticationException.java b/ldap/src/main/java/org/springframework/security/ldap/authentication/ad/ActiveDirectoryAuthenticationException.java index 42b0403740e..124fce51bbb 100644 --- a/ldap/src/main/java/org/springframework/security/ldap/authentication/ad/ActiveDirectoryAuthenticationException.java +++ b/ldap/src/main/java/org/springframework/security/ldap/authentication/ad/ActiveDirectoryAuthenticationException.java @@ -40,6 +40,7 @@ * * @author Rob Winch */ +@SuppressWarnings("serial") public final class ActiveDirectoryAuthenticationException extends AuthenticationException { private final String dataCode; diff --git a/ldap/src/main/java/org/springframework/security/ldap/ppolicy/PasswordPolicyException.java b/ldap/src/main/java/org/springframework/security/ldap/ppolicy/PasswordPolicyException.java index 73ab1420525..f01222d4a2a 100644 --- a/ldap/src/main/java/org/springframework/security/ldap/ppolicy/PasswordPolicyException.java +++ b/ldap/src/main/java/org/springframework/security/ldap/ppolicy/PasswordPolicyException.java @@ -16,6 +16,8 @@ package org.springframework.security.ldap.ppolicy; +import java.io.Serial; + /** * Generic exception raised by the ppolicy package. *

@@ -27,6 +29,9 @@ */ public class PasswordPolicyException extends RuntimeException { + @Serial + private static final long serialVersionUID = 2586535034047453106L; + private final PasswordPolicyErrorStatus status; public PasswordPolicyException(PasswordPolicyErrorStatus status) { diff --git a/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/ClientAuthorizationException.java b/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/ClientAuthorizationException.java index 8050b74a03f..257f26f4f59 100644 --- a/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/ClientAuthorizationException.java +++ b/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/ClientAuthorizationException.java @@ -16,6 +16,8 @@ package org.springframework.security.oauth2.client; +import java.io.Serial; + import org.springframework.security.oauth2.core.OAuth2AuthorizationException; import org.springframework.security.oauth2.core.OAuth2Error; import org.springframework.util.Assert; @@ -30,6 +32,9 @@ */ public class ClientAuthorizationException extends OAuth2AuthorizationException { + @Serial + private static final long serialVersionUID = 4710713969265443271L; + private final String clientRegistrationId; /** diff --git a/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/ClientAuthorizationRequiredException.java b/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/ClientAuthorizationRequiredException.java index ee4c0e47849..0bb5649ece9 100644 --- a/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/ClientAuthorizationRequiredException.java +++ b/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/ClientAuthorizationRequiredException.java @@ -16,6 +16,8 @@ package org.springframework.security.oauth2.client; +import java.io.Serial; + import org.springframework.security.oauth2.core.OAuth2Error; /** @@ -28,6 +30,9 @@ */ public class ClientAuthorizationRequiredException extends ClientAuthorizationException { + @Serial + private static final long serialVersionUID = -5738646355203953667L; + private static final String CLIENT_AUTHORIZATION_REQUIRED_ERROR_CODE = "client_authorization_required"; /** diff --git a/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/web/InvalidClientRegistrationIdException.java b/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/web/InvalidClientRegistrationIdException.java index f42249284fe..e7e718949c9 100644 --- a/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/web/InvalidClientRegistrationIdException.java +++ b/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/web/InvalidClientRegistrationIdException.java @@ -20,6 +20,7 @@ * @author Steve Riesenberg * @since 5.8 */ +@SuppressWarnings("serial") class InvalidClientRegistrationIdException extends IllegalArgumentException { /** diff --git a/oauth2/oauth2-core/src/main/java/org/springframework/security/oauth2/core/OAuth2AuthenticationException.java b/oauth2/oauth2-core/src/main/java/org/springframework/security/oauth2/core/OAuth2AuthenticationException.java index a868f3180de..ac760c5dc43 100644 --- a/oauth2/oauth2-core/src/main/java/org/springframework/security/oauth2/core/OAuth2AuthenticationException.java +++ b/oauth2/oauth2-core/src/main/java/org/springframework/security/oauth2/core/OAuth2AuthenticationException.java @@ -16,6 +16,8 @@ package org.springframework.security.oauth2.core; +import java.io.Serial; + import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; import org.springframework.util.Assert; @@ -41,6 +43,9 @@ */ public class OAuth2AuthenticationException extends AuthenticationException { + @Serial + private static final long serialVersionUID = -7832130893085581438L; + private final OAuth2Error error; /** diff --git a/oauth2/oauth2-core/src/main/java/org/springframework/security/oauth2/core/OAuth2AuthorizationException.java b/oauth2/oauth2-core/src/main/java/org/springframework/security/oauth2/core/OAuth2AuthorizationException.java index dbfdf98e5f0..af833d1dae4 100644 --- a/oauth2/oauth2-core/src/main/java/org/springframework/security/oauth2/core/OAuth2AuthorizationException.java +++ b/oauth2/oauth2-core/src/main/java/org/springframework/security/oauth2/core/OAuth2AuthorizationException.java @@ -16,6 +16,8 @@ package org.springframework.security.oauth2.core; +import java.io.Serial; + import org.springframework.util.Assert; /** @@ -26,6 +28,9 @@ */ public class OAuth2AuthorizationException extends RuntimeException { + @Serial + private static final long serialVersionUID = -5470222190376181102L; + private final OAuth2Error error; /** diff --git a/oauth2/oauth2-jose/src/main/java/org/springframework/security/oauth2/jwt/BadJwtException.java b/oauth2/oauth2-jose/src/main/java/org/springframework/security/oauth2/jwt/BadJwtException.java index 3a30545179d..2742d0c51ec 100644 --- a/oauth2/oauth2-jose/src/main/java/org/springframework/security/oauth2/jwt/BadJwtException.java +++ b/oauth2/oauth2-jose/src/main/java/org/springframework/security/oauth2/jwt/BadJwtException.java @@ -16,6 +16,8 @@ package org.springframework.security.oauth2.jwt; +import java.io.Serial; + /** * An exception similar to * {@link org.springframework.security.authentication.BadCredentialsException} that @@ -26,6 +28,9 @@ */ public class BadJwtException extends JwtException { + @Serial + private static final long serialVersionUID = 7748429527132280501L; + public BadJwtException(String message) { super(message); } diff --git a/oauth2/oauth2-jose/src/main/java/org/springframework/security/oauth2/jwt/JwtDecoderInitializationException.java b/oauth2/oauth2-jose/src/main/java/org/springframework/security/oauth2/jwt/JwtDecoderInitializationException.java index 775da4c9a92..cd1b90a14cb 100644 --- a/oauth2/oauth2-jose/src/main/java/org/springframework/security/oauth2/jwt/JwtDecoderInitializationException.java +++ b/oauth2/oauth2-jose/src/main/java/org/springframework/security/oauth2/jwt/JwtDecoderInitializationException.java @@ -16,6 +16,8 @@ package org.springframework.security.oauth2.jwt; +import java.io.Serial; + /** * An exception thrown when a {@link JwtDecoder} or {@link ReactiveJwtDecoder}'s lazy * initialization fails. @@ -25,6 +27,9 @@ */ public class JwtDecoderInitializationException extends RuntimeException { + @Serial + private static final long serialVersionUID = 2786360018315628982L; + public JwtDecoderInitializationException(String message, Throwable cause) { super(message, cause); } diff --git a/oauth2/oauth2-jose/src/main/java/org/springframework/security/oauth2/jwt/JwtEncodingException.java b/oauth2/oauth2-jose/src/main/java/org/springframework/security/oauth2/jwt/JwtEncodingException.java index 9b48f5c4a2d..365993c5edc 100644 --- a/oauth2/oauth2-jose/src/main/java/org/springframework/security/oauth2/jwt/JwtEncodingException.java +++ b/oauth2/oauth2-jose/src/main/java/org/springframework/security/oauth2/jwt/JwtEncodingException.java @@ -16,6 +16,8 @@ package org.springframework.security.oauth2.jwt; +import java.io.Serial; + /** * This exception is thrown when an error occurs while attempting to encode a JSON Web * Token (JWT). @@ -25,6 +27,9 @@ */ public class JwtEncodingException extends JwtException { + @Serial + private static final long serialVersionUID = 6581840872589902213L; + /** * Constructs a {@code JwtEncodingException} using the provided parameters. * @param message the detail message diff --git a/oauth2/oauth2-jose/src/main/java/org/springframework/security/oauth2/jwt/JwtException.java b/oauth2/oauth2-jose/src/main/java/org/springframework/security/oauth2/jwt/JwtException.java index b13f0dff265..2004727ffb7 100644 --- a/oauth2/oauth2-jose/src/main/java/org/springframework/security/oauth2/jwt/JwtException.java +++ b/oauth2/oauth2-jose/src/main/java/org/springframework/security/oauth2/jwt/JwtException.java @@ -16,6 +16,8 @@ package org.springframework.security.oauth2.jwt; +import java.io.Serial; + /** * Base exception for all JSON Web Token (JWT) related errors. * @@ -24,6 +26,9 @@ */ public class JwtException extends RuntimeException { + @Serial + private static final long serialVersionUID = -3070197880233583797L; + /** * Constructs a {@code JwtException} using the provided parameters. * @param message the detail message diff --git a/oauth2/oauth2-jose/src/main/java/org/springframework/security/oauth2/jwt/JwtValidationException.java b/oauth2/oauth2-jose/src/main/java/org/springframework/security/oauth2/jwt/JwtValidationException.java index 94568d2dc6b..ab3722e5fdc 100644 --- a/oauth2/oauth2-jose/src/main/java/org/springframework/security/oauth2/jwt/JwtValidationException.java +++ b/oauth2/oauth2-jose/src/main/java/org/springframework/security/oauth2/jwt/JwtValidationException.java @@ -16,6 +16,7 @@ package org.springframework.security.oauth2.jwt; +import java.io.Serial; import java.util.ArrayList; import java.util.Collection; @@ -31,6 +32,9 @@ */ public class JwtValidationException extends BadJwtException { + @Serial + private static final long serialVersionUID = 134652048447295615L; + private final Collection errors; /** diff --git a/oauth2/oauth2-resource-server/src/main/java/org/springframework/security/oauth2/server/resource/InvalidBearerTokenException.java b/oauth2/oauth2-resource-server/src/main/java/org/springframework/security/oauth2/server/resource/InvalidBearerTokenException.java index 0ba62813da7..c82b3bd5e49 100644 --- a/oauth2/oauth2-resource-server/src/main/java/org/springframework/security/oauth2/server/resource/InvalidBearerTokenException.java +++ b/oauth2/oauth2-resource-server/src/main/java/org/springframework/security/oauth2/server/resource/InvalidBearerTokenException.java @@ -16,6 +16,8 @@ package org.springframework.security.oauth2.server.resource; +import java.io.Serial; + import org.springframework.security.oauth2.core.OAuth2AuthenticationException; /** @@ -26,6 +28,9 @@ */ public class InvalidBearerTokenException extends OAuth2AuthenticationException { + @Serial + private static final long serialVersionUID = 6904689954809100280L; + /** * Construct an instance of {@link InvalidBearerTokenException} given the provided * description. diff --git a/oauth2/oauth2-resource-server/src/main/java/org/springframework/security/oauth2/server/resource/introspection/BadOpaqueTokenException.java b/oauth2/oauth2-resource-server/src/main/java/org/springframework/security/oauth2/server/resource/introspection/BadOpaqueTokenException.java index 5e155c8bce2..cddd32c3b0c 100644 --- a/oauth2/oauth2-resource-server/src/main/java/org/springframework/security/oauth2/server/resource/introspection/BadOpaqueTokenException.java +++ b/oauth2/oauth2-resource-server/src/main/java/org/springframework/security/oauth2/server/resource/introspection/BadOpaqueTokenException.java @@ -16,6 +16,8 @@ package org.springframework.security.oauth2.server.resource.introspection; +import java.io.Serial; + /** * An exception similar to * {@link org.springframework.security.authentication.BadCredentialsException} that @@ -26,6 +28,9 @@ */ public class BadOpaqueTokenException extends OAuth2IntrospectionException { + @Serial + private static final long serialVersionUID = -6937847463454551076L; + public BadOpaqueTokenException(String message) { super(message); } diff --git a/oauth2/oauth2-resource-server/src/main/java/org/springframework/security/oauth2/server/resource/introspection/OAuth2IntrospectionException.java b/oauth2/oauth2-resource-server/src/main/java/org/springframework/security/oauth2/server/resource/introspection/OAuth2IntrospectionException.java index e2649ba975c..6650d96e572 100644 --- a/oauth2/oauth2-resource-server/src/main/java/org/springframework/security/oauth2/server/resource/introspection/OAuth2IntrospectionException.java +++ b/oauth2/oauth2-resource-server/src/main/java/org/springframework/security/oauth2/server/resource/introspection/OAuth2IntrospectionException.java @@ -16,6 +16,8 @@ package org.springframework.security.oauth2.server.resource.introspection; +import java.io.Serial; + /** * Base exception for all OAuth 2.0 Introspection related errors * @@ -24,6 +26,9 @@ */ public class OAuth2IntrospectionException extends RuntimeException { + @Serial + private static final long serialVersionUID = -7327790383594166793L; + public OAuth2IntrospectionException(String message) { super(message); } diff --git a/web/src/main/java/org/springframework/security/web/firewall/RequestRejectedException.java b/web/src/main/java/org/springframework/security/web/firewall/RequestRejectedException.java index b997031a476..ea91775b62f 100644 --- a/web/src/main/java/org/springframework/security/web/firewall/RequestRejectedException.java +++ b/web/src/main/java/org/springframework/security/web/firewall/RequestRejectedException.java @@ -16,11 +16,16 @@ package org.springframework.security.web.firewall; +import java.io.Serial; + /** * @author Luke Taylor */ public class RequestRejectedException extends RuntimeException { + @Serial + private static final long serialVersionUID = 7226768874760909859L; + public RequestRejectedException(String message) { super(message); } diff --git a/web/src/main/java/org/springframework/security/web/server/authentication/SwitchUserWebFilter.java b/web/src/main/java/org/springframework/security/web/server/authentication/SwitchUserWebFilter.java index 8eab25cf1f6..85686f5815a 100644 --- a/web/src/main/java/org/springframework/security/web/server/authentication/SwitchUserWebFilter.java +++ b/web/src/main/java/org/springframework/security/web/server/authentication/SwitchUserWebFilter.java @@ -353,6 +353,7 @@ public void setSwitchUserMatcher(ServerWebExchangeMatcher switchUserMatcher) { this.switchUserMatcher = switchUserMatcher; } + @SuppressWarnings("serial") private static class SwitchUserAuthenticationException extends RuntimeException { SwitchUserAuthenticationException(AuthenticationException exception) { diff --git a/web/src/main/java/org/springframework/security/web/server/firewall/ServerExchangeRejectedException.java b/web/src/main/java/org/springframework/security/web/server/firewall/ServerExchangeRejectedException.java index 5246838dcfb..f46140d3515 100644 --- a/web/src/main/java/org/springframework/security/web/server/firewall/ServerExchangeRejectedException.java +++ b/web/src/main/java/org/springframework/security/web/server/firewall/ServerExchangeRejectedException.java @@ -16,6 +16,8 @@ package org.springframework.security.web.server.firewall; +import java.io.Serial; + /** * Thrown when a {@link org.springframework.web.server.ServerWebExchange} is rejected. * @@ -24,6 +26,9 @@ */ public class ServerExchangeRejectedException extends RuntimeException { + @Serial + private static final long serialVersionUID = 904984955691607748L; + public ServerExchangeRejectedException(String message) { super(message); } From ea0ec9e662e337061fe2230cb68239a2321fdc9c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Jan 2025 03:51:09 +0000 Subject: [PATCH 33/87] Bump io.projectreactor:reactor-bom from 2023.0.13 to 2023.0.14 Bumps [io.projectreactor:reactor-bom](https://github.com/reactor/reactor) from 2023.0.13 to 2023.0.14. - [Release notes](https://github.com/reactor/reactor/releases) - [Commits](https://github.com/reactor/reactor/compare/2023.0.13...2023.0.14) --- updated-dependencies: - dependency-name: io.projectreactor:reactor-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1cbbd944645..6e63c33655a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -28,7 +28,7 @@ com-unboundid-unboundid-ldapsdk = "com.unboundid:unboundid-ldapsdk:6.0.11" commons-collections = "commons-collections:commons-collections:3.2.2" io-micrometer-micrometer-observation = "io.micrometer:micrometer-observation:1.12.13" io-mockk = "io.mockk:mockk:1.13.16" -io-projectreactor-reactor-bom = "io.projectreactor:reactor-bom:2023.0.13" +io-projectreactor-reactor-bom = "io.projectreactor:reactor-bom:2023.0.14" io-rsocket-rsocket-bom = { module = "io.rsocket:rsocket-bom", version.ref = "io-rsocket" } io-spring-javaformat-spring-javaformat-checkstyle = { module = "io.spring.javaformat:spring-javaformat-checkstyle", version.ref = "io-spring-javaformat" } io-spring-javaformat-spring-javaformat-gradle-plugin = { module = "io.spring.javaformat:spring-javaformat-gradle-plugin", version.ref = "io-spring-javaformat" } From ce38162c867b8c251fba77c341aab9e1b6f1b8d4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Jan 2025 03:49:33 +0000 Subject: [PATCH 34/87] Bump io.projectreactor:reactor-bom from 2023.0.13 to 2023.0.14 Bumps [io.projectreactor:reactor-bom](https://github.com/reactor/reactor) from 2023.0.13 to 2023.0.14. - [Release notes](https://github.com/reactor/reactor/releases) - [Commits](https://github.com/reactor/reactor/compare/2023.0.13...2023.0.14) --- updated-dependencies: - dependency-name: io.projectreactor:reactor-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 308b08868ba..70de69dbc25 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -30,7 +30,7 @@ com-unboundid-unboundid-ldapsdk7 = "com.unboundid:unboundid-ldapsdk:7.0.1" commons-collections = "commons-collections:commons-collections:3.2.2" io-micrometer-micrometer-observation = "io.micrometer:micrometer-observation:1.14.3" io-mockk = "io.mockk:mockk:1.13.16" -io-projectreactor-reactor-bom = "io.projectreactor:reactor-bom:2023.0.13" +io-projectreactor-reactor-bom = "io.projectreactor:reactor-bom:2023.0.14" io-rsocket-rsocket-bom = { module = "io.rsocket:rsocket-bom", version.ref = "io-rsocket" } io-spring-javaformat-spring-javaformat-checkstyle = { module = "io.spring.javaformat:spring-javaformat-checkstyle", version.ref = "io-spring-javaformat" } io-spring-javaformat-spring-javaformat-gradle-plugin = { module = "io.spring.javaformat:spring-javaformat-gradle-plugin", version.ref = "io-spring-javaformat" } From a3f6825f9c5c070b1d60543a003d4ee771e2f60b Mon Sep 17 00:00:00 2001 From: Steve Riesenberg <5248162+sjohnr@users.noreply.github.com> Date: Wed, 15 Jan 2025 11:41:07 -0600 Subject: [PATCH 35/87] Fix missing GChat notifications with workaround This fix was suggested by GitHub Support as a workaround for a bug where `failure()` is not working for reusable workflows that will be fixed in a few months. Closes gh-16423 --- .github/workflows/continuous-integration-workflow.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index 495b8d536cb..3c53a7532f8 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -116,7 +116,7 @@ jobs: send-notification: name: Send Notification needs: [ perform-release ] - if: ${{ failure() || cancelled() }} + if: ${{ !success() }} runs-on: ubuntu-latest steps: - name: Send Notification From 60dbeba9858e81df06045db924aa9bfaff412592 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 Jan 2025 03:48:32 +0000 Subject: [PATCH 36/87] Bump org.springframework:spring-framework-bom from 6.2.1 to 6.2.2 Bumps [org.springframework:spring-framework-bom](https://github.com/spring-projects/spring-framework) from 6.2.1 to 6.2.2. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.1...v6.2.2) --- updated-dependencies: - dependency-name: org.springframework:spring-framework-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 70de69dbc25..c26718fa2e7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,7 +14,7 @@ org-jetbrains-kotlinx = "1.9.0" org-mockito = "5.14.2" org-opensaml = "4.3.2" org-opensaml5 = "5.1.2" -org-springframework = "6.2.1" +org-springframework = "6.2.2" [libraries] ch-qos-logback-logback-classic = "ch.qos.logback:logback-classic:1.5.16" From 5bf42bb7a814587ef41543f1e39ee6fb6da356df Mon Sep 17 00:00:00 2001 From: Daniel Garnier-Moiroux Date: Fri, 17 Jan 2025 15:07:24 +0100 Subject: [PATCH 37/87] webauthn: ensure allowCredentials[].id is an ArrayBuffer closes gh-16439 Signed-off-by: Daniel Garnier-Moiroux --- javascript/lib/webauthn-core.js | 8 ++++++++ javascript/test/webauthn-core.test.js | 16 ++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/javascript/lib/webauthn-core.js b/javascript/lib/webauthn-core.js index b4c26d08f0e..e2cdc0148d9 100644 --- a/javascript/lib/webauthn-core.js +++ b/javascript/lib/webauthn-core.js @@ -41,8 +41,16 @@ async function authenticate(headers, contextPath, useConditionalMediation) { } // FIXME: Use https://www.w3.org/TR/webauthn-3/#sctn-parseRequestOptionsFromJSON + const decodedAllowCredentials = !options.allowCredentials + ? [] + : options.allowCredentials.map((cred) => ({ + ...cred, + id: base64url.decode(cred.id), + })); + const decodedOptions = { ...options, + allowCredentials: decodedAllowCredentials, challenge: base64url.decode(options.challenge), }; diff --git a/javascript/test/webauthn-core.test.js b/javascript/test/webauthn-core.test.js index 2c6413a33e3..88dae0052e1 100644 --- a/javascript/test/webauthn-core.test.js +++ b/javascript/test/webauthn-core.test.js @@ -85,7 +85,13 @@ describe("webauthn-core", () => { challenge: "nRbOrtNKTfJ1JaxfUDKs8j3B-JFqyGQw8DO4u6eV3JA", timeout: 300000, rpId: "localhost", - allowCredentials: [], + allowCredentials: [ + { + id: "nOsjw8eaaqSwVdTBBYE1FqfGdHs", + type: "public-key", + transports: [], + }, + ], userVerification: "preferred", extensions: {}, }; @@ -172,7 +178,13 @@ describe("webauthn-core", () => { challenge: base64url.decode("nRbOrtNKTfJ1JaxfUDKs8j3B-JFqyGQw8DO4u6eV3JA"), timeout: 300000, rpId: "localhost", - allowCredentials: [], + allowCredentials: [ + { + id: base64url.decode("nOsjw8eaaqSwVdTBBYE1FqfGdHs"), + type: "public-key", + transports: [], + }, + ], userVerification: "preferred", extensions: {}, }, From 45da5c94b6bddcdc9a8406909133683d0a317d49 Mon Sep 17 00:00:00 2001 From: Josh Cummings <3627351+jzheaux@users.noreply.github.com> Date: Fri, 17 Jan 2025 14:15:30 -0700 Subject: [PATCH 38/87] Support Serialization in Test Classes Issue gh-16276 --- .../security/access/annotation/BusinessServiceImpl.java | 4 ++++ .../annotation/ExpressionProtectedBusinessServiceImpl.java | 4 ++++ .../security/access/annotation/Jsr250BusinessServiceImpl.java | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/core/src/test/java/org/springframework/security/access/annotation/BusinessServiceImpl.java b/core/src/test/java/org/springframework/security/access/annotation/BusinessServiceImpl.java index 0e732bf480c..587e795f5a4 100644 --- a/core/src/test/java/org/springframework/security/access/annotation/BusinessServiceImpl.java +++ b/core/src/test/java/org/springframework/security/access/annotation/BusinessServiceImpl.java @@ -16,6 +16,7 @@ package org.springframework.security.access.annotation; +import java.io.Serial; import java.util.ArrayList; import java.util.List; @@ -24,6 +25,9 @@ */ public class BusinessServiceImpl implements BusinessService { + @Serial + private static final long serialVersionUID = -4249394090237180795L; + @Override @Secured({ "ROLE_USER" }) public void someUserMethod1() { diff --git a/core/src/test/java/org/springframework/security/access/annotation/ExpressionProtectedBusinessServiceImpl.java b/core/src/test/java/org/springframework/security/access/annotation/ExpressionProtectedBusinessServiceImpl.java index 9d1b066d013..1ca226709b9 100644 --- a/core/src/test/java/org/springframework/security/access/annotation/ExpressionProtectedBusinessServiceImpl.java +++ b/core/src/test/java/org/springframework/security/access/annotation/ExpressionProtectedBusinessServiceImpl.java @@ -16,6 +16,7 @@ package org.springframework.security.access.annotation; +import java.io.Serial; import java.util.ArrayList; import java.util.List; @@ -25,6 +26,9 @@ public class ExpressionProtectedBusinessServiceImpl implements BusinessService { + @Serial + private static final long serialVersionUID = -3320014879907436606L; + @Override public void someAdminMethod() { } diff --git a/core/src/test/java/org/springframework/security/access/annotation/Jsr250BusinessServiceImpl.java b/core/src/test/java/org/springframework/security/access/annotation/Jsr250BusinessServiceImpl.java index b19b19bfcfa..6d9f34ac615 100644 --- a/core/src/test/java/org/springframework/security/access/annotation/Jsr250BusinessServiceImpl.java +++ b/core/src/test/java/org/springframework/security/access/annotation/Jsr250BusinessServiceImpl.java @@ -16,6 +16,7 @@ package org.springframework.security.access.annotation; +import java.io.Serial; import java.util.ArrayList; import java.util.List; @@ -28,6 +29,9 @@ @PermitAll public class Jsr250BusinessServiceImpl implements BusinessService { + @Serial + private static final long serialVersionUID = -7550211450382764339L; + @Override @RolesAllowed("ROLE_USER") public void someUserMethod1() { From bbe4f876410ed47099516213b7e5b8a50f3c8d52 Mon Sep 17 00:00:00 2001 From: Josh Cummings <3627351+jzheaux@users.noreply.github.com> Date: Fri, 17 Jan 2025 16:08:15 -0700 Subject: [PATCH 39/87] Mark Serialization Support for Events Issue gh-16276 --- ...gSecurityCoreVersionSerializableTests.java | 62 +++++++++++++++++- ...ationFailureBadCredentialsEvent.serialized | Bin 0 -> 11264 bytes ...nFailureCredentialsExpiredEvent.serialized | Bin 0 -> 11353 bytes ...henticationFailureDisabledEvent.serialized | Bin 0 -> 11333 bytes ...thenticationFailureExpiredEvent.serialized | Bin 0 -> 11338 bytes ...uthenticationFailureLockedEvent.serialized | Bin 0 -> 11329 bytes ...ionFailureProviderNotFoundEvent.serialized | Bin 0 -> 11268 bytes ...ationFailureProxyUntrustedEvent.serialized | Bin 0 -> 11271 bytes ...ionFailureServiceExceptionEvent.serialized | Bin 0 -> 11273 bytes ...vent.AuthenticationSuccessEvent.serialized | Bin 0 -> 304 bytes ...ctiveAuthenticationSuccessEvent.serialized | Bin 0 -> 414 bytes ...cation.event.LogoutSuccessEvent.serialized | Bin 0 -> 296 bytes ...t.JaasAuthenticationFailedEvent.serialized | Bin 0 -> 10968 bytes ....JaasAuthenticationSuccessEvent.serialized | Bin 0 -> 314 bytes ...re.session.AbstractSessionEvent.serialized | Bin 0 -> 198 bytes ....SessionFixationProtectionEvent.serialized | Bin 0 -> 382 bytes ...r.AuthenticationSwitchUserEvent.serialized | Bin 0 -> 1016 bytes ...session.HttpSessionCreatedEvent.serialized | Bin 0 -> 354 bytes ...uthenticationCredentialsNotFoundEvent.java | 1 + .../event/AuthorizationFailureEvent.java | 1 + .../access/event/AuthorizedEvent.java | 1 + .../access/event/PublicInvocationEvent.java | 1 + ...henticationFailureBadCredentialsEvent.java | 5 ++ ...icationFailureCredentialsExpiredEvent.java | 5 ++ .../AuthenticationFailureDisabledEvent.java | 5 ++ .../AuthenticationFailureExpiredEvent.java | 5 ++ .../AuthenticationFailureLockedEvent.java | 5 ++ ...nticationFailureProviderNotFoundEvent.java | 5 ++ ...henticationFailureProxyUntrustedEvent.java | 5 ++ ...nticationFailureServiceExceptionEvent.java | 5 ++ .../event/AuthenticationSuccessEvent.java | 5 ++ ...InteractiveAuthenticationSuccessEvent.java | 5 ++ .../event/LogoutSuccessEvent.java | 7 +- .../event/JaasAuthenticationFailedEvent.java | 5 ++ .../event/JaasAuthenticationSuccessEvent.java | 5 ++ .../event/AuthorizationDeniedEvent.java | 3 +- .../event/AuthorizationEvent.java | 7 +- .../event/AuthorizationGrantedEvent.java | 7 +- .../context/SecurityContextChangedEvent.java | 3 +- .../core/session/AbstractSessionEvent.java | 7 +- .../SessionFixationProtectionEvent.java | 7 +- .../AuthenticationSwitchUserEvent.java | 5 ++ .../web/session/HttpSessionCreatedEvent.java | 1 + .../session/HttpSessionDestroyedEvent.java | 1 + .../session/HttpSessionIdChangedEvent.java | 8 ++- .../SessionInformationExpiredEvent.java | 3 +- 46 files changed, 175 insertions(+), 10 deletions(-) create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.event.AuthenticationFailureBadCredentialsEvent.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.event.AuthenticationFailureCredentialsExpiredEvent.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.event.AuthenticationFailureDisabledEvent.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.event.AuthenticationFailureExpiredEvent.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.event.AuthenticationFailureLockedEvent.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.event.AuthenticationFailureProviderNotFoundEvent.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.event.AuthenticationFailureProxyUntrustedEvent.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.event.AuthenticationFailureServiceExceptionEvent.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.event.AuthenticationSuccessEvent.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.event.InteractiveAuthenticationSuccessEvent.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.event.LogoutSuccessEvent.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.jaas.event.JaasAuthenticationFailedEvent.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.jaas.event.JaasAuthenticationSuccessEvent.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.core.session.AbstractSessionEvent.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.authentication.session.SessionFixationProtectionEvent.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.authentication.switchuser.AuthenticationSwitchUserEvent.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.session.HttpSessionCreatedEvent.serialized diff --git a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java index 407a055d428..359a7d48809 100644 --- a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java +++ b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2024 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -54,6 +54,7 @@ import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider; import org.springframework.core.type.filter.AssignableTypeFilter; +import org.springframework.mock.web.MockHttpSession; import org.springframework.security.access.AccessDeniedException; import org.springframework.security.access.AuthorizationServiceException; import org.springframework.security.access.intercept.RunAsUserToken; @@ -73,16 +74,33 @@ import org.springframework.security.authentication.TestAuthentication; import org.springframework.security.authentication.TestingAuthenticationToken; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.authentication.event.AuthenticationFailureBadCredentialsEvent; +import org.springframework.security.authentication.event.AuthenticationFailureCredentialsExpiredEvent; +import org.springframework.security.authentication.event.AuthenticationFailureDisabledEvent; +import org.springframework.security.authentication.event.AuthenticationFailureExpiredEvent; +import org.springframework.security.authentication.event.AuthenticationFailureLockedEvent; +import org.springframework.security.authentication.event.AuthenticationFailureProviderNotFoundEvent; +import org.springframework.security.authentication.event.AuthenticationFailureProxyUntrustedEvent; +import org.springframework.security.authentication.event.AuthenticationFailureServiceExceptionEvent; +import org.springframework.security.authentication.event.AuthenticationSuccessEvent; +import org.springframework.security.authentication.event.InteractiveAuthenticationSuccessEvent; +import org.springframework.security.authentication.event.LogoutSuccessEvent; import org.springframework.security.authentication.jaas.JaasAuthenticationToken; +import org.springframework.security.authentication.jaas.event.JaasAuthenticationFailedEvent; +import org.springframework.security.authentication.jaas.event.JaasAuthenticationSuccessEvent; import org.springframework.security.authentication.ott.InvalidOneTimeTokenException; import org.springframework.security.authentication.ott.OneTimeTokenAuthenticationToken; import org.springframework.security.authentication.password.CompromisedPasswordException; import org.springframework.security.cas.authentication.CasAssertionAuthenticationToken; import org.springframework.security.cas.authentication.CasAuthenticationToken; import org.springframework.security.cas.authentication.CasServiceTicketAuthenticationToken; +import org.springframework.security.core.Authentication; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.SpringSecurityCoreVersion; import org.springframework.security.core.authority.AuthorityUtils; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextImpl; +import org.springframework.security.core.session.AbstractSessionEvent; import org.springframework.security.core.session.ReactiveSessionInformation; import org.springframework.security.core.session.SessionInformation; import org.springframework.security.core.userdetails.UserDetails; @@ -163,6 +181,8 @@ import org.springframework.security.web.authentication.rememberme.InvalidCookieException; import org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationException; import org.springframework.security.web.authentication.session.SessionAuthenticationException; +import org.springframework.security.web.authentication.session.SessionFixationProtectionEvent; +import org.springframework.security.web.authentication.switchuser.AuthenticationSwitchUserEvent; import org.springframework.security.web.authentication.www.NonceExpiredException; import org.springframework.security.web.csrf.CsrfException; import org.springframework.security.web.csrf.DefaultCsrfToken; @@ -170,6 +190,7 @@ import org.springframework.security.web.csrf.MissingCsrfTokenException; import org.springframework.security.web.firewall.RequestRejectedException; import org.springframework.security.web.server.firewall.ServerExchangeRejectedException; +import org.springframework.security.web.session.HttpSessionCreatedEvent; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; @@ -200,6 +221,8 @@ class SpringSecurityCoreVersionSerializableTests { static { UserDetails user = TestAuthentication.user(); + Authentication authentication = TestAuthentication.authenticated(user); + SecurityContext securityContext = new SecurityContextImpl(authentication); // oauth2-core generatorByClassName.put(DefaultOAuth2User.class, (r) -> TestOAuth2Users.create()); @@ -375,6 +398,37 @@ class SpringSecurityCoreVersionSerializableTests { (r) -> new UsernameNotFoundException("error", new RuntimeException())); generatorByClassName.put(TestingAuthenticationToken.class, (r) -> applyDetails(new TestingAuthenticationToken("username", "password"))); + generatorByClassName.put(AuthenticationFailureBadCredentialsEvent.class, + (r) -> new AuthenticationFailureBadCredentialsEvent(authentication, + new BadCredentialsException("message"))); + generatorByClassName.put(AuthenticationFailureCredentialsExpiredEvent.class, + (r) -> new AuthenticationFailureCredentialsExpiredEvent(authentication, + new CredentialsExpiredException("message"))); + generatorByClassName.put(AuthenticationFailureDisabledEvent.class, + (r) -> new AuthenticationFailureDisabledEvent(authentication, new DisabledException("message"))); + generatorByClassName.put(AuthenticationFailureExpiredEvent.class, + (r) -> new AuthenticationFailureExpiredEvent(authentication, new AccountExpiredException("message"))); + generatorByClassName.put(AuthenticationFailureLockedEvent.class, + (r) -> new AuthenticationFailureLockedEvent(authentication, new LockedException("message"))); + generatorByClassName.put(AuthenticationFailureProviderNotFoundEvent.class, + (r) -> new AuthenticationFailureProviderNotFoundEvent(authentication, + new ProviderNotFoundException("message"))); + generatorByClassName.put(AuthenticationFailureProxyUntrustedEvent.class, + (r) -> new AuthenticationFailureProxyUntrustedEvent(authentication, + new AuthenticationServiceException("message"))); + generatorByClassName.put(AuthenticationFailureServiceExceptionEvent.class, + (r) -> new AuthenticationFailureServiceExceptionEvent(authentication, + new AuthenticationServiceException("message"))); + generatorByClassName.put(AuthenticationSuccessEvent.class, + (r) -> new AuthenticationSuccessEvent(authentication)); + generatorByClassName.put(InteractiveAuthenticationSuccessEvent.class, + (r) -> new InteractiveAuthenticationSuccessEvent(authentication, Authentication.class)); + generatorByClassName.put(LogoutSuccessEvent.class, (r) -> new LogoutSuccessEvent(authentication)); + generatorByClassName.put(JaasAuthenticationFailedEvent.class, + (r) -> new JaasAuthenticationFailedEvent(authentication, new RuntimeException("message"))); + generatorByClassName.put(JaasAuthenticationSuccessEvent.class, + (r) -> new JaasAuthenticationSuccessEvent(authentication)); + generatorByClassName.put(AbstractSessionEvent.class, (r) -> new AbstractSessionEvent(securityContext)); // cas generatorByClassName.put(CasServiceTicketAuthenticationToken.class, (r) -> { @@ -448,6 +502,12 @@ class SpringSecurityCoreVersionSerializableTests { generatorByClassName.put(RequestRejectedException.class, (r) -> new RequestRejectedException("message")); generatorByClassName.put(ServerExchangeRejectedException.class, (r) -> new ServerExchangeRejectedException("message")); + generatorByClassName.put(SessionFixationProtectionEvent.class, + (r) -> new SessionFixationProtectionEvent(authentication, "old", "new")); + generatorByClassName.put(AuthenticationSwitchUserEvent.class, + (r) -> new AuthenticationSwitchUserEvent(authentication, user)); + generatorByClassName.put(HttpSessionCreatedEvent.class, + (r) -> new HttpSessionCreatedEvent(new MockHttpSession())); } @ParameterizedTest diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.event.AuthenticationFailureBadCredentialsEvent.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.event.AuthenticationFailureBadCredentialsEvent.serialized new file mode 100644 index 0000000000000000000000000000000000000000..979b2e937adc5956bbaa1329de3221a146856e87 GIT binary patch literal 11264 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 literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.event.AuthenticationFailureCredentialsExpiredEvent.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.event.AuthenticationFailureCredentialsExpiredEvent.serialized new file mode 100644 index 0000000000000000000000000000000000000000..e4afece24aad97f864f0acb7498197e5eb294865 GIT binary patch literal 11353 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

iqNHoMh{0ozU=bV{4ckah~ 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 literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.event.AuthenticationFailureLockedEvent.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.event.AuthenticationFailureLockedEvent.serialized new file mode 100644 index 0000000000000000000000000000000000000000..46609358d9b1a9771dac5931fe430f815ec97c21 GIT binary patch literal 11329 zcmeGiZHygN^}cP{b_*1!EiJTAS{@WE%x)>Rlb?50f**Q_jhW)T=MM3D+tK*?v%w(x;rexpPs0zZCp9@>yIv#YgT6DxEBy#?>QCeCum9>BTiO_#3EAj7ATSn*&~`*2 zAtG_(i@UCie(~D6HdY#B9el>&0Wv69_aKn#%)%ok*A?M*fN4GhG7SPxNtu?8J@EItAKd%vzrY3$unytYcqHsv04%PW zw5M&WAzaTQ$U|e3+!2E(JBHTOKK3mn6);wMbb9F6PeHxiMMPt9WYw#57z<>{lS~o>-BT1 zqY}@hBoNQ8SFK^738K<~Pu$(UciD~i|5XCMF9FmLzd5sh_odzIUdlm?PK5q(d(7jn zy!?SpJC2|FIqRNzM3`MhfQq8qFN#VFU-B5X}T7u=uYCw#W_w!S=Sas}XW_Bg(<`f|V&$ zBRq6%&%GCQJ_@G|WZXG_U<<_tTJh}KSj8@bhQVo;w|4~rZFUuK$ZkY#R||F%GU(O; zrtY{tJP97wZO^LmIuC8(hgQvv9BXgIpVb?1j zNYXkI@o)s}%yW4~lQ|uY>H<^Dj59);6 z7F@;^6ZBLD6n}0t0VXp5f~}FbhJ9a1eEXHLo6CA=85mg;we*LfA8PeqWd2l=xER7{ z#l;N3_AnngR3{*l2zjE_NGTS{g<0NA@Y9N?%bW1j6S(_pfd_(BPuetgnrNQW64{MU zdjxBjR1Kig84a`spDux*0LPJ>5$|n;A;baYqsV#kC|=CohClFl*H2ca5;qd^aSt+r z*njZKLGr2)lIbwt01MjP`m{f#jS~Dn+YHlN3i0%Dk5|E+)vIYla{n7zz1Bh*5Uhg& z%b1Pfvwh2UtIOIdT_aF$y9ubTNg_|Y1xZk_bLB&V4&_A7?KbUR+ukNIg4afsO*ZPT zumaB(7^W=8uhsl|B-5s0DIll(HKml$phJc!u^;wM*lxWH z4#KUF3KJl~)+ax*E3~AKn%sPK9{U!&j)B=4g*?n}i2fNh0sGEQseN})07Q08T3;Yq zINXWDF^GK{4#P8s>AYs{%B@ zF-^k^n1s@U?SZq{sAq~+DtW9@IfOrc)OXe4EvFKRk0@SmdAGbGo{C@>D2guaAWcj9 zbiqdEMJu*)z0cSJ^#rdZR)^$o$0229x2WCidRG*Sag*<-DBux*V9OmmAw6|sD{+Z< z%&#IwaFD?GG+^53F%3Z0Q^^4woeSU(1RxltM1|+O!Xqbi@hDqp_R?_isZYNU?6PLB zlu2EZQg8xXzRBFqe#J~rB6#gUm0!bJ1oA;^!i7vVbS9u=^(%0DLa-L7Q+oUitrW}%PxI0v z?grvC{!^Q2w?io7QxQofuSj7YZ0%Ukjz5>%@rt|@O^kHl=rl`SaDB=Su2hov@B%G* z1S(fBU~X6T8HSFEm+syVp<0}Fv3|Ga4I9feYK+y~RIGbLv3YcXY?|g*?&IS&6kL6? zb-U&|Ca;M7L{2upC89VyS`2WK00g7raX!8&4z5Vs^iJ#P#Hh%den~PxIw`f)h%yde z!r{wFU9Ie)tji8eU7v^KaWf^4)D?r?A-8MRfFJhT&cvZ0D(lDcp>c@L5b*R&6l=wX z^f(Ym&de(j{b@jdbq+n?;gFd-{IDBv?0}TFmbVCYac*93@rfej-=8P)8_HX7`PXqM zM0A?kKVNGN^gIEP^LzY%fa$D}Yrh@DbWNgzo-nj$vFlaVPb1K~fNV>)NtWwrrQQpn z3P5WZ<~4}+kbL3pGm38e4-nau5K(rNQ)qb~_yv+P^x72O0(7O7^HlBjv!dF0>3=>z zi~gJzgCW>Rirbih7-;;GhY4lzOp!p&0OAcf`Sz%0e|(OhP{>XxB`$URU=|WdzXwkks`yU%|cz>|B*&C-Dr4+d!m`Lo=68Ln{ZWhY@~H1B!B}&8&##{i}HVS-h%<-8sOI%9s;n@NtV2n8XJq=XkL*SI*`|sfJG!9L) zh_9re@#zH|GDoRoY6IW@xBv(gfU`frfxJ5ZIia1VQmf54Ln*UNt#SaeGQ#O3r@qfjx))ryAg%{Y46;7K z=}+PCX&fFj0UpMgOkV$x2{0!Q*-`=#o-{GEEFB>0JLe7Xy7I!1l1iOWASQB-&*GEm z_fY=VYR+j7pNDcv7P38_XObu1k=fz@r<74(Z!S!z2>p-uqR#MY@2tN3$vzI#11B>9QxqVSEMHzrad2M@8L?tu200Oq@bL?A~a$>Ar|( zH|ov=H1O%W19|Z#Ykg>DAA(L7)U>L&xT3||V#41hvBOYWhQqn|GbI+;&}{*5GcG}Y zp)lkt;#7n9WDfk|(J@;z)5xMH9%ct3Y{a`KeySpb{$F zuw-V6<#a@|y%O12mE)k30E#h?^01+90|B+R-Zp0 zy*)sWdirzI8)-l-uSKNgC)m0sZ(==`^u>G|T#dd36pQahhu|`7THON07o+k%^Ri~I zl<=3xc;1DUXhwhR6dfe7Z$bgkmjDArK${VW?Zbi6m?9v!55@NfaTvlO2ZRDG!}jR1 zQwh|KKP0KRQD6&a!h#|Z8}i`7`qUI$qva>n)|STWOs%b+AioMqI9cEPrPgPP+%X_G)RG*S%FJv`p{HU8&=M-gzu~+lcTf6zf=i0l z#PpNTXv0i2n=!79_zZ6u+MaL$rfhS~oNn5IwN<~Do$_7Xx68vcjqvAh*p z8Ocwjr$u3-ZmQ^kj22qBs~iPX=`J`|s<8?!lY`J8gKyaCvj2_WVwtq6wAou|84O8) zK!e=V>Lp(BQ!81?0c40?DRHcdH@H;tDpn6!t&YG_9D-e1IIp#(!xeHf3j}X7tfe)< zk=aP_n(-N?VX`sxO>+Y&6)lE)F`e)uGkZxicPrV=phPsaPtd-6k#aS(HhjcPR}CwisKY01~qGNta1QD)1apxxW?&>bBl{YV~tF OpL*go@O3l6%zpt=Zz1OZ literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.event.AuthenticationFailureProviderNotFoundEvent.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.event.AuthenticationFailureProviderNotFoundEvent.serialized new file mode 100644 index 0000000000000000000000000000000000000000..18de70b6051208f01718a3b6d727bbf0cdab0fe8 GIT binary patch literal 11268 zcmeGiTWl4_b*=$}Ng#yq3Xp)w4WtFu=20Fokhu26nA(QghNgieTJIfSuf2D7*_~_b zs3nmgX{j2OK9p2xnp9QQ^pUEn8Y%Rpv}%d^P^7j}KKjw9tyCfP_0fK{5~1hJ%+Ag} zu6+sgtN3F)J9Fl|=ggcl_m#hsd0{|KdO^hq{lIoBqk&nar@dgp2&q*IY&LC}H8w_F zW?Lq+J=dU<@L_Z&1`nFHQw!+Pz?-zoG#K#ML9gbPO9*=A^Ixv5fBm0Vn+TZ-$nd)$ zH4?JGv{)`lPGaXz_HPM)`S#i-Qs^TsbjqSWvdTzDACPNHN!Aug)@FGDZA+ppMTtDX|+b8$`TPR{n9&QVmrcsaw9fLz285yS*>wBhUU{&>_UqezpA%)LP4xD@w3|-128mS{~=!`WZ z)%fRjJ?Fi2`5ht1-WhSCic`*_RJ?ZX2iyO2OJ!K#S7k@Q}% zt~MmvrXV}|$f7c3;L`mx49yC_E!E(L819pf6J#OSz?v8a*93^WPb5I1iIPLBum=F; zvasg+0U)Gh#dXNY60r;o*w$x-i7a?OX&&{0s>yoELdSOLK&?7LgFbSb<(OgE z=b5;hAtE48i~7joGKC40zYFK(=z>w(p&Hb}DrI9{IWgjuYYCV|RX%c@1|jTJj%dm+ zfU7>w$Q;x68R?nPuZDQE8j>-p3%pFC8lr)1I`-pe^I_N~pyRg2felm}Sj91`BW1G) z7KXT2+`Y~Bxv14}>6RVPq;V{y!4UYFW7D!C0sGhjS3%abb9s@|l9LwTB+I~A$-u@s3@F|Ynie=PBg;}F96KUu z)#ZAaqs3+uHuo`ddqvoe4tQmH+;nQXRhlkvct+~6(Hpr&$*sWF0ya`3QpiOSl{5wN zL&eb+>}_S_)(G~fH}2`oe>Dqg1=M6z90)q-#S|!hZr1_EQvi&t61WCEj|qIe(%JQ8 zoqQQMSsk;Kg1`%u`ES=hr6yLu`B%2_=r$d^QXFwPkWPe0q7_IfQpu7uZ#wuT$Tv!JR06|N|tmDpPahXQOz9*k&LEePNokTHq} zPZ~yx$yNA+h_`jTJQ0VHfQ~wFlt=M{miu{B?X<*Z-VO_zZFka}P)-T)pKONVZMk^5 zsY5Fe&fH28k&wT2rfH>=5+g1AU>Py-_-x*`+h{j-h|mbsoAvXE#Q9~Z5$RR8 z3M~oRk)+%R0FgedmWO02%ChLJt(Eye_a&w zac||gv6_y zOhYTMaVs0>_QG+o*R3WPxvSokbg4TN29AM?dvtMlK!y8hXRLS?KxJIRTmc=GUzYIacaGGD|-b@-sB-%@%Cu!rf5@Wq%_ozYLE!0~fR2k4#+ zAc|xi*C;C9=a8piGn{~Hp8hGtTO(C1r5waWBeW-}GhN)JvnZ5}d`@C>IwQkplniIE z_XHy|pibEFJYUI(c04s?N0bK6Y5XUJX*L5a$LM^E%PUf7fUUjy%2_4;R7T>ZSuN@q z%c%wUnec;qH~=FLU89+YAaex=re^t&=ICg65wyJkvc*Xo^LL|R*hr^gZKP@^&brHz z&Ewa|rtW^lZaQj0!qq+PnpNAPe$Z*r3BB*R)&vGy$Xo{RHp=?}#nksILE^)00s4&@^ni!L&D^3#ZJ%NVq`0HFjgb|Z zaV6px^N@eHLFC(u+i>}pu*pSqiI;y~ni=Rd4)g^C;t}wFjOm7vYyL2(>Au(ook3tu zW7VsudP7jVfZLWRlPp%l(!5I`3qWreq*XZW;qrwlNEy26KR{$tOho!o#-PPR5ErGf?{yn+bLCN}fWl0OHn+emiBA zKH5i+D5Qs^5f@mVKMfa2FAw>@xNCn8r@jvx{B&UYaH;F6zk)mq?A)7SCyoqp*g&K& zKrxq2LMaEbhaq~Z21z+&=sBE_Z>2WbkMn^3l3;g1ggFPaX&Ct2kl{1qmbjFMhi~T~ z0cXU~?MVu0f#@-LGNo}QqZVjCOQ4SCo07qZPhDW1ZMP0Kt z5#3L7$blYlloxicPfu_nAf{Pj?F|FEX%=$ReaYOte;^vU+S-O!q602uvv(o3C1= z^k@|`u`+(DiUzZMfFj68Aoia^AuE9i@8gE)+wt=ngVJAUFz^RRBgH$D@}k4X;MM7< ze00J}2Y;|r@90HYAcey~P0}zbDKS!@+1CG6oyGO(LP53EWDr=R%5e z2*YA~yK)i)dK9GORs9<*rKCDHWbn`|fBt~<9sqj0rawEqp&I1!N<~V4jI6CQ6WOt# z9_E|iY4jbSnEy690FPml@)an07!~iCch#Gc%AYUJ^LF&aUTm~VQ9oDvMpVEioGRr3 zZAKu{gUz9OKuvo%P#@0s=K`TZiy$6@osSklrrK^X{R|s&DE`NE@g!o!c~R>nsguRD_K~D zl1V=l$ly0@uBdJ(H0U>rcj@OyQCw^W^mU;jkVpNI)tK6k6ax)DCKcIQb%mjy~Lq@CG?JZgPhK7;;97RSR6zqw_wbWRFvcxLmZygztrYg_v<{=yF!Ly2bSd;R qG8apt01}XOag|A)R1i7BVyWsgUTuB+;>uU|z5L?akRMI?Q~w2=8V2bA literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.event.AuthenticationFailureProxyUntrustedEvent.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.event.AuthenticationFailureProxyUntrustedEvent.serialized new file mode 100644 index 0000000000000000000000000000000000000000..f348e60c844bf665224fdb5f20502093bb695520 GIT binary patch literal 11271 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 literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.event.AuthenticationSuccessEvent.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.event.AuthenticationSuccessEvent.serialized new file mode 100644 index 0000000000000000000000000000000000000000..d04eb51778bdbfb327fbf11ba216260556902228 GIT binary patch literal 304 zcmZ4UmVvdnh`}enC|$3(peQphJ*_A)H?=&!C|j>MHMz7Xv!qflv9u&3HLoNyIk6-& zKTj{U49L-QL=g-wO-@cNE_MY;DVu)ZrN6>rH4_6vMG=E98Ac}+mlP!?m!Mh!Hv6Q) z^1qiFY=1(`*1=|Wa(-S(Y6Z}N1qC@!Cxf*nwY-k+a6kKyiGk6JfwLqtH?_DVF}DEd sMA59ovP8YolFS@EuuA`=tkmQZpI%NsiQL*1Agc-(7#OFN`NiA^0B2WqjQ{`u literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.event.InteractiveAuthenticationSuccessEvent.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.event.InteractiveAuthenticationSuccessEvent.serialized new file mode 100644 index 0000000000000000000000000000000000000000..49143cf81885e7b75fc7e83f06b7a6961f800163 GIT binary patch literal 414 zcmZ4UmVvdnh#@?`C|$3(peQphJ*_A)H?=&!C|j>MHMz7Xv!qflv9u&3HLoNyIk6-& zKTj{U49L;*%qvMPN=z=vEK7Ankq<6SPEIW@b_J<=lBhIMBf`^}iGk6Ffjd1l52&Ri zHN~m2gh9|JE3qt5KPNFSUEet;vAEc}qKLtlbayx=6_b>qrMHMz7Xv!qflv9u&3HLoNyIk6-& zKTj{U49L;*$xqKOEeS47PEIW@b_EH!eYP+zP|euR#K2Hd#NbQ1k&a2lB}IwJC5|Ze zfz3Xtu>9|(2HT$yvvshUot&Rnl3G!s=U7mX19d7`Yf{VW_zw5851AMky%;!4GILXl xOA>PnfKC+6N-Rs%D=o>)(F3dWPs&P7F7fH*^pnV~T>-MHfPsN=N||5Ga{x3^aohj^ literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.jaas.event.JaasAuthenticationFailedEvent.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.jaas.event.JaasAuthenticationFailedEvent.serialized new file mode 100644 index 0000000000000000000000000000000000000000..d371ae6ae4b35e4494fa7c2ba264dfdf99d49199 GIT binary patch literal 10968 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 D#sr91 literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.jaas.event.JaasAuthenticationSuccessEvent.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.authentication.jaas.event.JaasAuthenticationSuccessEvent.serialized new file mode 100644 index 0000000000000000000000000000000000000000..6532dac81f9e14282b16b768638ae7cd9ba00f72 GIT binary patch literal 314 zcmZ4UmVvdnh#@q;C|$3(peQphJ*_A)H?=&!C|j>MHMz7Xv!qflv9u&3HLoNyIk6-& zKTj_!F|k-LwG1et=LKXsqR0l9CMTyB7rTO_<+;vr|42P&%EZ7>QN-X!H9NqD*NH{H z40-%44`R3uHp7$i^GZ@HO7t8H3UZ*12Ww4gc^%*3e)b^~1EUuMXGvymYH>+oZUNAZ rqFIS$iF&0anK^o3mHtUtsmUciy_|j$xwR`mRuwQXFit7+i}?Zo9g%na literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.core.session.AbstractSessionEvent.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.core.session.AbstractSessionEvent.serialized new file mode 100644 index 0000000000000000000000000000000000000000..a22f7a0f9b301f61a27bc9a26303e0e4b63b8382 GIT binary patch literal 198 zcmZ4UmVvdnh`}zuC|$3(peQphJ*_A)H?=&!C|j>MHMz7Xv!qflIlm|s$SW?+%+J$v zOe!uZN=z;ZhVWg>Qu9g{bozcjVqL(=#K2Hd#Gr%Cu;l!_lGKV4J;#EAoXq6J5};9F ztw}Af<2&5XK4fBG^kU#F$;?eHE=kNS02(8jl~|UjS6Y&pqX$;$pOlrFT;kKq=_ip} Ry8>iY0Rsc$lrq1V{{X;DN}d1! literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.authentication.session.SessionFixationProtectionEvent.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.authentication.session.SessionFixationProtectionEvent.serialized new file mode 100644 index 0000000000000000000000000000000000000000..4fc1f92cb28c81f01751073ec619d3db40c623ee GIT binary patch literal 382 zcmZ4UmVvdnh#@S$C|$3(peQphJ*_A)H?=&!C|j>MHMz7Xv!qh5JT*x#v9u&3HLoNy zIk6-&KMyEZTnwUvA+%d&1z0?wD8D2%8KlCs45<1}kH%Ghwku9d3`{-@Jb9_*Q01N} zB@9A7S&3zd`ZH5JXAe*g$YVvbZ;A#pP>KGU+iWq$HIu6ZYsUUmx9FvMmiV~Ac z98p{icGF3P<$o_V*#2Zlo61hUq zMg)I=Vq>R;|A>f%_7>KXQp7^=%_iqwLNGYhGVjgzeee6;zTbp{&caP?o6H%j(&mcg ziR@^*&YTo2tFXs9vcY%@S7nMya8x>FuA@+_ww$zVdPk*}73x%|w5k8bkNH<`#^v!M z6hb(J+%_fpB0@PN&R`d3FyIV?wleVekwmUy7x-6~x4z3=3s?WCc$Zq~rLgISL(2v3 z6r9QYaQ5x*Fa1luiU5RtelKjHQ zCb$r~m10$=m99}%MoTcB--TMN`>RPo6(1yz-EixuOnD=gQ3!{AQ oqrVh+`1EIuSRD`iMkp;Vgq7ubt+LofIC3x5+HB;Zjre^20D41h9RL6T literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.session.HttpSessionCreatedEvent.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.session.HttpSessionCreatedEvent.serialized new file mode 100644 index 0000000000000000000000000000000000000000..95888e6e1cce1dfc2db81311a0ddccdc81ae31cd GIT binary patch literal 354 zcmZ4UmVvdnh`}MhC|$3(peQphJ*_A)H?=&!C|j>MHMz7Xv!qh5JT(c(DK5^;&(rfL zDJcksu$_xi6H8K4T+34PN@mu6liQU%*_(-hp`wVv4zF>^`9-O4^N`H~nh!Rt@Tss^ z-Ksa+NjA(esko#lF}Vb4DA=$Coxb0XSQl_Y4Aa5pvgG`{lGKV4J;#EAoXq6J5|}%Z zT3*L@xSxH<#K7pqz*&-+n_66wm|Fn!plDWNS)yKPNoI~7*b@JwtkmQZpI%NsiQL*1 QAgc-(7#OFN`NaeS0K4gj4FCWD literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/springframework/security/access/event/AuthenticationCredentialsNotFoundEvent.java b/core/src/main/java/org/springframework/security/access/event/AuthenticationCredentialsNotFoundEvent.java index daae07eec98..8d7107ed5bb 100644 --- a/core/src/main/java/org/springframework/security/access/event/AuthenticationCredentialsNotFoundEvent.java +++ b/core/src/main/java/org/springframework/security/access/event/AuthenticationCredentialsNotFoundEvent.java @@ -32,6 +32,7 @@ * instead. */ @Deprecated +@SuppressWarnings("serial") public class AuthenticationCredentialsNotFoundEvent extends AbstractAuthorizationEvent { private final AuthenticationCredentialsNotFoundException credentialsNotFoundException; diff --git a/core/src/main/java/org/springframework/security/access/event/AuthorizationFailureEvent.java b/core/src/main/java/org/springframework/security/access/event/AuthorizationFailureEvent.java index eac534ba6dd..fba28adf0bb 100644 --- a/core/src/main/java/org/springframework/security/access/event/AuthorizationFailureEvent.java +++ b/core/src/main/java/org/springframework/security/access/event/AuthorizationFailureEvent.java @@ -39,6 +39,7 @@ * instead */ @Deprecated +@SuppressWarnings("serial") public class AuthorizationFailureEvent extends AbstractAuthorizationEvent { private final AccessDeniedException accessDeniedException; diff --git a/core/src/main/java/org/springframework/security/access/event/AuthorizedEvent.java b/core/src/main/java/org/springframework/security/access/event/AuthorizedEvent.java index 7697dea90df..3ec29ce6a2c 100644 --- a/core/src/main/java/org/springframework/security/access/event/AuthorizedEvent.java +++ b/core/src/main/java/org/springframework/security/access/event/AuthorizedEvent.java @@ -34,6 +34,7 @@ * instead */ @Deprecated +@SuppressWarnings("serial") public class AuthorizedEvent extends AbstractAuthorizationEvent { private final Authentication authentication; diff --git a/core/src/main/java/org/springframework/security/access/event/PublicInvocationEvent.java b/core/src/main/java/org/springframework/security/access/event/PublicInvocationEvent.java index 2aab5dba91e..7289d8a1edd 100644 --- a/core/src/main/java/org/springframework/security/access/event/PublicInvocationEvent.java +++ b/core/src/main/java/org/springframework/security/access/event/PublicInvocationEvent.java @@ -34,6 +34,7 @@ * {@link AuthorizationGrantedEvent#getSource()} to deduce public invocations. */ @Deprecated +@SuppressWarnings("serial") public class PublicInvocationEvent extends AbstractAuthorizationEvent { /** diff --git a/core/src/main/java/org/springframework/security/authentication/event/AuthenticationFailureBadCredentialsEvent.java b/core/src/main/java/org/springframework/security/authentication/event/AuthenticationFailureBadCredentialsEvent.java index 796690b0e61..6c80a3e883b 100644 --- a/core/src/main/java/org/springframework/security/authentication/event/AuthenticationFailureBadCredentialsEvent.java +++ b/core/src/main/java/org/springframework/security/authentication/event/AuthenticationFailureBadCredentialsEvent.java @@ -16,6 +16,8 @@ package org.springframework.security.authentication.event; +import java.io.Serial; + import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; @@ -27,6 +29,9 @@ */ public class AuthenticationFailureBadCredentialsEvent extends AbstractAuthenticationFailureEvent { + @Serial + private static final long serialVersionUID = -5245144711561130379L; + public AuthenticationFailureBadCredentialsEvent(Authentication authentication, AuthenticationException exception) { super(authentication, exception); } diff --git a/core/src/main/java/org/springframework/security/authentication/event/AuthenticationFailureCredentialsExpiredEvent.java b/core/src/main/java/org/springframework/security/authentication/event/AuthenticationFailureCredentialsExpiredEvent.java index 57f218a239e..2849ba03714 100644 --- a/core/src/main/java/org/springframework/security/authentication/event/AuthenticationFailureCredentialsExpiredEvent.java +++ b/core/src/main/java/org/springframework/security/authentication/event/AuthenticationFailureCredentialsExpiredEvent.java @@ -16,6 +16,8 @@ package org.springframework.security.authentication.event; +import java.io.Serial; + import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; @@ -27,6 +29,9 @@ */ public class AuthenticationFailureCredentialsExpiredEvent extends AbstractAuthenticationFailureEvent { + @Serial + private static final long serialVersionUID = -7595086332769705203L; + public AuthenticationFailureCredentialsExpiredEvent(Authentication authentication, AuthenticationException exception) { super(authentication, exception); diff --git a/core/src/main/java/org/springframework/security/authentication/event/AuthenticationFailureDisabledEvent.java b/core/src/main/java/org/springframework/security/authentication/event/AuthenticationFailureDisabledEvent.java index 3a4604354f4..79c0fd479fc 100644 --- a/core/src/main/java/org/springframework/security/authentication/event/AuthenticationFailureDisabledEvent.java +++ b/core/src/main/java/org/springframework/security/authentication/event/AuthenticationFailureDisabledEvent.java @@ -16,6 +16,8 @@ package org.springframework.security.authentication.event; +import java.io.Serial; + import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; @@ -27,6 +29,9 @@ */ public class AuthenticationFailureDisabledEvent extends AbstractAuthenticationFailureEvent { + @Serial + private static final long serialVersionUID = 8037552364666766279L; + public AuthenticationFailureDisabledEvent(Authentication authentication, AuthenticationException exception) { super(authentication, exception); } diff --git a/core/src/main/java/org/springframework/security/authentication/event/AuthenticationFailureExpiredEvent.java b/core/src/main/java/org/springframework/security/authentication/event/AuthenticationFailureExpiredEvent.java index 086e16cb378..a1f680dc5d9 100644 --- a/core/src/main/java/org/springframework/security/authentication/event/AuthenticationFailureExpiredEvent.java +++ b/core/src/main/java/org/springframework/security/authentication/event/AuthenticationFailureExpiredEvent.java @@ -16,6 +16,8 @@ package org.springframework.security.authentication.event; +import java.io.Serial; + import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; @@ -27,6 +29,9 @@ */ public class AuthenticationFailureExpiredEvent extends AbstractAuthenticationFailureEvent { + @Serial + private static final long serialVersionUID = -8437264795214121718L; + public AuthenticationFailureExpiredEvent(Authentication authentication, AuthenticationException exception) { super(authentication, exception); } diff --git a/core/src/main/java/org/springframework/security/authentication/event/AuthenticationFailureLockedEvent.java b/core/src/main/java/org/springframework/security/authentication/event/AuthenticationFailureLockedEvent.java index 544964cdec4..5cc0702909a 100644 --- a/core/src/main/java/org/springframework/security/authentication/event/AuthenticationFailureLockedEvent.java +++ b/core/src/main/java/org/springframework/security/authentication/event/AuthenticationFailureLockedEvent.java @@ -16,6 +16,8 @@ package org.springframework.security.authentication.event; +import java.io.Serial; + import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; @@ -27,6 +29,9 @@ */ public class AuthenticationFailureLockedEvent extends AbstractAuthenticationFailureEvent { + @Serial + private static final long serialVersionUID = -5126110096093568463L; + public AuthenticationFailureLockedEvent(Authentication authentication, AuthenticationException exception) { super(authentication, exception); } diff --git a/core/src/main/java/org/springframework/security/authentication/event/AuthenticationFailureProviderNotFoundEvent.java b/core/src/main/java/org/springframework/security/authentication/event/AuthenticationFailureProviderNotFoundEvent.java index 1a1cf7c87ee..ee4f5538e26 100644 --- a/core/src/main/java/org/springframework/security/authentication/event/AuthenticationFailureProviderNotFoundEvent.java +++ b/core/src/main/java/org/springframework/security/authentication/event/AuthenticationFailureProviderNotFoundEvent.java @@ -16,6 +16,8 @@ package org.springframework.security.authentication.event; +import java.io.Serial; + import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; @@ -27,6 +29,9 @@ */ public class AuthenticationFailureProviderNotFoundEvent extends AbstractAuthenticationFailureEvent { + @Serial + private static final long serialVersionUID = 9122219669183263487L; + public AuthenticationFailureProviderNotFoundEvent(Authentication authentication, AuthenticationException exception) { super(authentication, exception); diff --git a/core/src/main/java/org/springframework/security/authentication/event/AuthenticationFailureProxyUntrustedEvent.java b/core/src/main/java/org/springframework/security/authentication/event/AuthenticationFailureProxyUntrustedEvent.java index 772774d3f18..31617e6caa0 100644 --- a/core/src/main/java/org/springframework/security/authentication/event/AuthenticationFailureProxyUntrustedEvent.java +++ b/core/src/main/java/org/springframework/security/authentication/event/AuthenticationFailureProxyUntrustedEvent.java @@ -16,6 +16,8 @@ package org.springframework.security.authentication.event; +import java.io.Serial; + import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; @@ -27,6 +29,9 @@ */ public class AuthenticationFailureProxyUntrustedEvent extends AbstractAuthenticationFailureEvent { + @Serial + private static final long serialVersionUID = 1801476426012753252L; + public AuthenticationFailureProxyUntrustedEvent(Authentication authentication, AuthenticationException exception) { super(authentication, exception); } diff --git a/core/src/main/java/org/springframework/security/authentication/event/AuthenticationFailureServiceExceptionEvent.java b/core/src/main/java/org/springframework/security/authentication/event/AuthenticationFailureServiceExceptionEvent.java index 167d5fae3b3..d84f38625e3 100644 --- a/core/src/main/java/org/springframework/security/authentication/event/AuthenticationFailureServiceExceptionEvent.java +++ b/core/src/main/java/org/springframework/security/authentication/event/AuthenticationFailureServiceExceptionEvent.java @@ -16,6 +16,8 @@ package org.springframework.security.authentication.event; +import java.io.Serial; + import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; @@ -27,6 +29,9 @@ */ public class AuthenticationFailureServiceExceptionEvent extends AbstractAuthenticationFailureEvent { + @Serial + private static final long serialVersionUID = 5580062757249390756L; + public AuthenticationFailureServiceExceptionEvent(Authentication authentication, AuthenticationException exception) { super(authentication, exception); diff --git a/core/src/main/java/org/springframework/security/authentication/event/AuthenticationSuccessEvent.java b/core/src/main/java/org/springframework/security/authentication/event/AuthenticationSuccessEvent.java index 5b3b9bcd24b..5b18199a6c9 100644 --- a/core/src/main/java/org/springframework/security/authentication/event/AuthenticationSuccessEvent.java +++ b/core/src/main/java/org/springframework/security/authentication/event/AuthenticationSuccessEvent.java @@ -16,6 +16,8 @@ package org.springframework.security.authentication.event; +import java.io.Serial; + import org.springframework.security.core.Authentication; /** @@ -25,6 +27,9 @@ */ public class AuthenticationSuccessEvent extends AbstractAuthenticationEvent { + @Serial + private static final long serialVersionUID = 2537206344128673963L; + public AuthenticationSuccessEvent(Authentication authentication) { super(authentication); } diff --git a/core/src/main/java/org/springframework/security/authentication/event/InteractiveAuthenticationSuccessEvent.java b/core/src/main/java/org/springframework/security/authentication/event/InteractiveAuthenticationSuccessEvent.java index c93d2a9165d..eac89b4eafd 100644 --- a/core/src/main/java/org/springframework/security/authentication/event/InteractiveAuthenticationSuccessEvent.java +++ b/core/src/main/java/org/springframework/security/authentication/event/InteractiveAuthenticationSuccessEvent.java @@ -16,6 +16,8 @@ package org.springframework.security.authentication.event; +import java.io.Serial; + import org.springframework.security.core.Authentication; import org.springframework.util.Assert; @@ -34,6 +36,9 @@ */ public class InteractiveAuthenticationSuccessEvent extends AbstractAuthenticationEvent { + @Serial + private static final long serialVersionUID = -1990271553478571709L; + private final Class generatedBy; public InteractiveAuthenticationSuccessEvent(Authentication authentication, Class generatedBy) { diff --git a/core/src/main/java/org/springframework/security/authentication/event/LogoutSuccessEvent.java b/core/src/main/java/org/springframework/security/authentication/event/LogoutSuccessEvent.java index 094d0a332d7..1ea77c2a21d 100644 --- a/core/src/main/java/org/springframework/security/authentication/event/LogoutSuccessEvent.java +++ b/core/src/main/java/org/springframework/security/authentication/event/LogoutSuccessEvent.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,8 @@ package org.springframework.security.authentication.event; +import java.io.Serial; + import org.springframework.security.core.Authentication; /** @@ -26,6 +28,9 @@ */ public class LogoutSuccessEvent extends AbstractAuthenticationEvent { + @Serial + private static final long serialVersionUID = 5112491795571632311L; + public LogoutSuccessEvent(Authentication authentication) { super(authentication); } diff --git a/core/src/main/java/org/springframework/security/authentication/jaas/event/JaasAuthenticationFailedEvent.java b/core/src/main/java/org/springframework/security/authentication/jaas/event/JaasAuthenticationFailedEvent.java index 4b70d779509..c3b6d427bda 100644 --- a/core/src/main/java/org/springframework/security/authentication/jaas/event/JaasAuthenticationFailedEvent.java +++ b/core/src/main/java/org/springframework/security/authentication/jaas/event/JaasAuthenticationFailedEvent.java @@ -16,6 +16,8 @@ package org.springframework.security.authentication.jaas.event; +import java.io.Serial; + import org.springframework.security.core.Authentication; /** @@ -26,6 +28,9 @@ */ public class JaasAuthenticationFailedEvent extends JaasAuthenticationEvent { + @Serial + private static final long serialVersionUID = -240510538971925002L; + private final Exception exception; public JaasAuthenticationFailedEvent(Authentication auth, Exception exception) { diff --git a/core/src/main/java/org/springframework/security/authentication/jaas/event/JaasAuthenticationSuccessEvent.java b/core/src/main/java/org/springframework/security/authentication/jaas/event/JaasAuthenticationSuccessEvent.java index 0afa2b882b9..ec654a2a9fc 100644 --- a/core/src/main/java/org/springframework/security/authentication/jaas/event/JaasAuthenticationSuccessEvent.java +++ b/core/src/main/java/org/springframework/security/authentication/jaas/event/JaasAuthenticationSuccessEvent.java @@ -16,6 +16,8 @@ package org.springframework.security.authentication.jaas.event; +import java.io.Serial; + import org.springframework.security.core.Authentication; /** @@ -28,6 +30,9 @@ */ public class JaasAuthenticationSuccessEvent extends JaasAuthenticationEvent { + @Serial + private static final long serialVersionUID = 2236826715750256181L; + public JaasAuthenticationSuccessEvent(Authentication auth) { super(auth); } diff --git a/core/src/main/java/org/springframework/security/authorization/event/AuthorizationDeniedEvent.java b/core/src/main/java/org/springframework/security/authorization/event/AuthorizationDeniedEvent.java index 94e7d6a2312..05d0fcdbc5d 100644 --- a/core/src/main/java/org/springframework/security/authorization/event/AuthorizationDeniedEvent.java +++ b/core/src/main/java/org/springframework/security/authorization/event/AuthorizationDeniedEvent.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2022 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,6 +30,7 @@ * @author Josh Cummings * @since 5.7 */ +@SuppressWarnings("serial") public class AuthorizationDeniedEvent extends AuthorizationEvent { /** diff --git a/core/src/main/java/org/springframework/security/authorization/event/AuthorizationEvent.java b/core/src/main/java/org/springframework/security/authorization/event/AuthorizationEvent.java index a848dff4917..d4bce6b586d 100644 --- a/core/src/main/java/org/springframework/security/authorization/event/AuthorizationEvent.java +++ b/core/src/main/java/org/springframework/security/authorization/event/AuthorizationEvent.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2022 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,7 @@ package org.springframework.security.authorization.event; +import java.io.Serial; import java.util.function.Supplier; import org.springframework.context.ApplicationEvent; @@ -31,8 +32,12 @@ * @author Josh Cummings * @since 5.8 */ +@SuppressWarnings("serial") public class AuthorizationEvent extends ApplicationEvent { + @Serial + private static final long serialVersionUID = -9053927371500241295L; + private final Supplier authentication; private final AuthorizationResult result; diff --git a/core/src/main/java/org/springframework/security/authorization/event/AuthorizationGrantedEvent.java b/core/src/main/java/org/springframework/security/authorization/event/AuthorizationGrantedEvent.java index 693bc7e4a76..9cde3519303 100644 --- a/core/src/main/java/org/springframework/security/authorization/event/AuthorizationGrantedEvent.java +++ b/core/src/main/java/org/springframework/security/authorization/event/AuthorizationGrantedEvent.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2022 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,7 @@ package org.springframework.security.authorization.event; +import java.io.Serial; import java.util.function.Supplier; import org.springframework.context.ApplicationEvent; @@ -30,8 +31,12 @@ * @author Josh Cummings * @since 5.7 */ +@SuppressWarnings("serial") public class AuthorizationGrantedEvent extends AuthorizationEvent { + @Serial + private static final long serialVersionUID = -8690818228055810339L; + /** * @deprecated please use a constructor that takes an * {@link org.springframework.security.authorization.AuthorizationResult} diff --git a/core/src/main/java/org/springframework/security/core/context/SecurityContextChangedEvent.java b/core/src/main/java/org/springframework/security/core/context/SecurityContextChangedEvent.java index c14125c475e..ac38804cff5 100644 --- a/core/src/main/java/org/springframework/security/core/context/SecurityContextChangedEvent.java +++ b/core/src/main/java/org/springframework/security/core/context/SecurityContextChangedEvent.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2021 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,6 +26,7 @@ * @author Josh Cummings * @since 5.6 */ +@SuppressWarnings("serial") public class SecurityContextChangedEvent extends ApplicationEvent { public static final Supplier NO_CONTEXT = () -> null; diff --git a/core/src/main/java/org/springframework/security/core/session/AbstractSessionEvent.java b/core/src/main/java/org/springframework/security/core/session/AbstractSessionEvent.java index 4c8c20da5ce..a02ad09eb6f 100644 --- a/core/src/main/java/org/springframework/security/core/session/AbstractSessionEvent.java +++ b/core/src/main/java/org/springframework/security/core/session/AbstractSessionEvent.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2020 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,8 @@ package org.springframework.security.core.session; +import java.io.Serial; + import org.springframework.context.ApplicationEvent; /** @@ -26,6 +28,9 @@ */ public class AbstractSessionEvent extends ApplicationEvent { + @Serial + private static final long serialVersionUID = -6878881229287231479L; + public AbstractSessionEvent(Object source) { super(source); } diff --git a/web/src/main/java/org/springframework/security/web/authentication/session/SessionFixationProtectionEvent.java b/web/src/main/java/org/springframework/security/web/authentication/session/SessionFixationProtectionEvent.java index 1b6c36deb36..f06cec22e34 100644 --- a/web/src/main/java/org/springframework/security/web/authentication/session/SessionFixationProtectionEvent.java +++ b/web/src/main/java/org/springframework/security/web/authentication/session/SessionFixationProtectionEvent.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,8 @@ package org.springframework.security.web.authentication.session; +import java.io.Serial; + import org.springframework.security.authentication.event.AbstractAuthenticationEvent; import org.springframework.security.core.Authentication; import org.springframework.util.Assert; @@ -29,6 +31,9 @@ */ public class SessionFixationProtectionEvent extends AbstractAuthenticationEvent { + @Serial + private static final long serialVersionUID = -2554621992006921150L; + private final String oldSessionId; private final String newSessionId; diff --git a/web/src/main/java/org/springframework/security/web/authentication/switchuser/AuthenticationSwitchUserEvent.java b/web/src/main/java/org/springframework/security/web/authentication/switchuser/AuthenticationSwitchUserEvent.java index 70ba6108bb0..5b7af22bf31 100644 --- a/web/src/main/java/org/springframework/security/web/authentication/switchuser/AuthenticationSwitchUserEvent.java +++ b/web/src/main/java/org/springframework/security/web/authentication/switchuser/AuthenticationSwitchUserEvent.java @@ -16,6 +16,8 @@ package org.springframework.security.web.authentication.switchuser; +import java.io.Serial; + import org.springframework.security.authentication.event.AbstractAuthenticationEvent; import org.springframework.security.core.Authentication; import org.springframework.security.core.userdetails.UserDetails; @@ -27,6 +29,9 @@ */ public class AuthenticationSwitchUserEvent extends AbstractAuthenticationEvent { + @Serial + private static final long serialVersionUID = 6265996480231793939L; + private final UserDetails targetUser; /** diff --git a/web/src/main/java/org/springframework/security/web/session/HttpSessionCreatedEvent.java b/web/src/main/java/org/springframework/security/web/session/HttpSessionCreatedEvent.java index 15dcfff296a..547bc7fcdba 100644 --- a/web/src/main/java/org/springframework/security/web/session/HttpSessionCreatedEvent.java +++ b/web/src/main/java/org/springframework/security/web/session/HttpSessionCreatedEvent.java @@ -27,6 +27,7 @@ * @author Ray Krueger * @author Luke Taylor */ +@SuppressWarnings("serial") public class HttpSessionCreatedEvent extends SessionCreationEvent { public HttpSessionCreatedEvent(HttpSession session) { diff --git a/web/src/main/java/org/springframework/security/web/session/HttpSessionDestroyedEvent.java b/web/src/main/java/org/springframework/security/web/session/HttpSessionDestroyedEvent.java index 944dd3c202d..d3ac900ad47 100644 --- a/web/src/main/java/org/springframework/security/web/session/HttpSessionDestroyedEvent.java +++ b/web/src/main/java/org/springframework/security/web/session/HttpSessionDestroyedEvent.java @@ -33,6 +33,7 @@ * @author Luke Taylor * @author Rob Winch */ +@SuppressWarnings("serial") public class HttpSessionDestroyedEvent extends SessionDestroyedEvent { public HttpSessionDestroyedEvent(HttpSession session) { diff --git a/web/src/main/java/org/springframework/security/web/session/HttpSessionIdChangedEvent.java b/web/src/main/java/org/springframework/security/web/session/HttpSessionIdChangedEvent.java index 1320c1bb50d..ec0b645d580 100644 --- a/web/src/main/java/org/springframework/security/web/session/HttpSessionIdChangedEvent.java +++ b/web/src/main/java/org/springframework/security/web/session/HttpSessionIdChangedEvent.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2020 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,8 @@ package org.springframework.security.web.session; +import java.io.Serial; + import jakarta.servlet.http.HttpSession; import org.springframework.security.core.session.SessionIdChangedEvent; @@ -26,8 +28,12 @@ * * @since 5.4 */ +@SuppressWarnings("serial") public class HttpSessionIdChangedEvent extends SessionIdChangedEvent { + @Serial + private static final long serialVersionUID = -5725731666499807941L; + private final String oldSessionId; private final String newSessionId; diff --git a/web/src/main/java/org/springframework/security/web/session/SessionInformationExpiredEvent.java b/web/src/main/java/org/springframework/security/web/session/SessionInformationExpiredEvent.java index 1fa8e1573c6..44c99a56b5d 100644 --- a/web/src/main/java/org/springframework/security/web/session/SessionInformationExpiredEvent.java +++ b/web/src/main/java/org/springframework/security/web/session/SessionInformationExpiredEvent.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2024 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,6 +30,7 @@ * @author Rob Winch * @since 4.2 */ +@SuppressWarnings("serial") public final class SessionInformationExpiredEvent extends ApplicationEvent { private final HttpServletRequest request; From 7f410ce5b43042adde4960d31fd5dc3213643f12 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 03:44:48 +0000 Subject: [PATCH 40/87] Bump org.springframework.data:spring-data-bom from 2024.0.7 to 2024.0.8 Bumps [org.springframework.data:spring-data-bom](https://github.com/spring-projects/spring-data-bom) from 2024.0.7 to 2024.0.8. - [Release notes](https://github.com/spring-projects/spring-data-bom/releases) - [Commits](https://github.com/spring-projects/spring-data-bom/compare/2024.0.7...2024.0.8) --- updated-dependencies: - dependency-name: org.springframework.data:spring-data-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6e63c33655a..b339342be02 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -84,7 +84,7 @@ org-seleniumhq-selenium-selenium-support = "org.seleniumhq.selenium:selenium-sup org-skyscreamer-jsonassert = "org.skyscreamer:jsonassert:1.5.3" org-slf4j-log4j-over-slf4j = "org.slf4j:log4j-over-slf4j:1.7.36" org-slf4j-slf4j-api = "org.slf4j:slf4j-api:2.0.16" -org-springframework-data-spring-data-bom = "org.springframework.data:spring-data-bom:2024.0.7" +org-springframework-data-spring-data-bom = "org.springframework.data:spring-data-bom:2024.0.8" org-springframework-ldap-spring-ldap-core = "org.springframework.ldap:spring-ldap-core:3.2.10" org-springframework-spring-framework-bom = { module = "org.springframework:spring-framework-bom", version.ref = "org-springframework" } org-synchronoss-cloud-nio-multipart-parser = "org.synchronoss.cloud:nio-multipart-parser:1.1.0" From 331812df164bdc8da8b23dd893aff9be4ad7da29 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 04:05:11 +0000 Subject: [PATCH 41/87] Bump org.hibernate.orm:hibernate-core from 6.6.4.Final to 6.6.5.Final Bumps [org.hibernate.orm:hibernate-core](https://github.com/hibernate/hibernate-orm) from 6.6.4.Final to 6.6.5.Final. - [Release notes](https://github.com/hibernate/hibernate-orm/releases) - [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.5/changelog.txt) - [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.4...6.6.5) --- updated-dependencies: - dependency-name: org.hibernate.orm:hibernate-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c26718fa2e7..696c61590ef 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -70,7 +70,7 @@ org-bouncycastle-bcprov-jdk15on = { module = "org.bouncycastle:bcprov-jdk18on", org-eclipse-jetty-jetty-server = { module = "org.eclipse.jetty:jetty-server", version.ref = "org-eclipse-jetty" } org-eclipse-jetty-jetty-servlet = { module = "org.eclipse.jetty:jetty-servlet", version.ref = "org-eclipse-jetty" } org-hamcrest = "org.hamcrest:hamcrest:2.2" -org-hibernate-orm-hibernate-core = "org.hibernate.orm:hibernate-core:6.6.4.Final" +org-hibernate-orm-hibernate-core = "org.hibernate.orm:hibernate-core:6.6.5.Final" org-hsqldb = "org.hsqldb:hsqldb:2.7.4" org-jetbrains-kotlin-kotlin-bom = { module = "org.jetbrains.kotlin:kotlin-bom", version.ref = "org-jetbrains-kotlin" } org-jetbrains-kotlin-kotlin-gradle-plugin = "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.25" From 42a49bbd7866361698995b4cb7c0da41ed710af4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 04:05:51 +0000 Subject: [PATCH 42/87] Bump org.springframework.data:spring-data-bom from 2024.1.1 to 2024.1.2 Bumps [org.springframework.data:spring-data-bom](https://github.com/spring-projects/spring-data-bom) from 2024.1.1 to 2024.1.2. - [Release notes](https://github.com/spring-projects/spring-data-bom/releases) - [Commits](https://github.com/spring-projects/spring-data-bom/compare/2024.1.1...2024.1.2) --- updated-dependencies: - dependency-name: org.springframework.data:spring-data-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 696c61590ef..1761d5ca76d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -88,7 +88,7 @@ org-seleniumhq-selenium-selenium-support = "org.seleniumhq.selenium:selenium-sup org-skyscreamer-jsonassert = "org.skyscreamer:jsonassert:1.5.3" org-slf4j-log4j-over-slf4j = "org.slf4j:log4j-over-slf4j:1.7.36" org-slf4j-slf4j-api = "org.slf4j:slf4j-api:2.0.16" -org-springframework-data-spring-data-bom = "org.springframework.data:spring-data-bom:2024.1.1" +org-springframework-data-spring-data-bom = "org.springframework.data:spring-data-bom:2024.1.2" org-springframework-ldap-spring-ldap-core = "org.springframework.ldap:spring-ldap-core:3.2.10" org-springframework-spring-framework-bom = { module = "org.springframework:spring-framework-bom", version.ref = "org-springframework" } org-synchronoss-cloud-nio-multipart-parser = "org.synchronoss.cloud:nio-multipart-parser:1.1.0" From 3209930ccab59aae5330fc2030da77b35fe7efd3 Mon Sep 17 00:00:00 2001 From: Rob Winch <362503+rwinch@users.noreply.github.com> Date: Tue, 21 Jan 2025 13:19:27 -0600 Subject: [PATCH 43/87] Add TestBytes Closes gh-16461 --- .../security/web/webauthn/api/TestBytes.java | 31 +++++++++++++++++++ .../TestPublicKeyCredentialUserEntity.java | 2 +- .../MapUserCredentialRepositoryTests.java | 12 +++---- ...RegistrationPageGeneratingFilterTests.java | 14 ++++----- 4 files changed, 45 insertions(+), 14 deletions(-) create mode 100644 web/src/test/java/org/springframework/security/web/webauthn/api/TestBytes.java diff --git a/web/src/test/java/org/springframework/security/web/webauthn/api/TestBytes.java b/web/src/test/java/org/springframework/security/web/webauthn/api/TestBytes.java new file mode 100644 index 00000000000..b8850c12de8 --- /dev/null +++ b/web/src/test/java/org/springframework/security/web/webauthn/api/TestBytes.java @@ -0,0 +1,31 @@ +/* + * Copyright 2002-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.security.web.webauthn.api; + +/** + * @author Rob Winch + */ +public final class TestBytes { + + public static Bytes get() { + return Bytes.fromBase64("OSCtNugR-n4YR4ozlHRa-CKXzY9v-yMKtQGcvui5xN8"); + } + + private TestBytes() { + } + +} diff --git a/web/src/test/java/org/springframework/security/web/webauthn/api/TestPublicKeyCredentialUserEntity.java b/web/src/test/java/org/springframework/security/web/webauthn/api/TestPublicKeyCredentialUserEntity.java index 704e6ce17fc..cc35752d15c 100644 --- a/web/src/test/java/org/springframework/security/web/webauthn/api/TestPublicKeyCredentialUserEntity.java +++ b/web/src/test/java/org/springframework/security/web/webauthn/api/TestPublicKeyCredentialUserEntity.java @@ -21,7 +21,7 @@ public final class TestPublicKeyCredentialUserEntity { public static PublicKeyCredentialUserEntityBuilder userEntity() { - return ImmutablePublicKeyCredentialUserEntity.builder().name("user").id(Bytes.random()).displayName("user"); + return ImmutablePublicKeyCredentialUserEntity.builder().name("user").id(TestBytes.get()).displayName("user"); } private TestPublicKeyCredentialUserEntity() { diff --git a/web/src/test/java/org/springframework/security/web/webauthn/management/MapUserCredentialRepositoryTests.java b/web/src/test/java/org/springframework/security/web/webauthn/management/MapUserCredentialRepositoryTests.java index 36081973f88..d14e98df126 100644 --- a/web/src/test/java/org/springframework/security/web/webauthn/management/MapUserCredentialRepositoryTests.java +++ b/web/src/test/java/org/springframework/security/web/webauthn/management/MapUserCredentialRepositoryTests.java @@ -20,9 +20,9 @@ import org.junit.jupiter.api.Test; -import org.springframework.security.web.webauthn.api.Bytes; import org.springframework.security.web.webauthn.api.CredentialRecord; import org.springframework.security.web.webauthn.api.ImmutableCredentialRecord; +import org.springframework.security.web.webauthn.api.TestBytes; import org.springframework.security.web.webauthn.api.TestCredentialRecord; import static org.assertj.core.api.Assertions.assertThat; @@ -41,7 +41,7 @@ class MapUserCredentialRepositoryTests { @Test void findByUserIdWhenNotFoundThenEmpty() { - assertThat(this.userCredentials.findByUserId(Bytes.random())).isEmpty(); + assertThat(this.userCredentials.findByUserId(TestBytes.get())).isEmpty(); } @Test @@ -56,7 +56,7 @@ void findByCredentialIdWhenIdNullThenIllegalArgumentException() { @Test void findByCredentialIdWhenNotFoundThenIllegalArgumentException() { - assertThat(this.userCredentials.findByCredentialId(Bytes.random())).isNull(); + assertThat(this.userCredentials.findByCredentialId(TestBytes.get())).isNull(); } @Test @@ -114,7 +114,7 @@ void saveWhenSameUserThenUpdated() { ImmutableCredentialRecord credentialRecord = TestCredentialRecord.userCredential().build(); this.userCredentials.save(credentialRecord); CredentialRecord newCredentialRecord = ImmutableCredentialRecord.fromCredentialRecord(credentialRecord) - .credentialId(Bytes.random()) + .credentialId(TestBytes.get()) .build(); this.userCredentials.save(newCredentialRecord); assertThat(this.userCredentials.findByCredentialId(credentialRecord.getCredentialId())) @@ -130,8 +130,8 @@ void saveWhenDifferentUserThenNewEntryAdded() { ImmutableCredentialRecord credentialRecord = TestCredentialRecord.userCredential().build(); this.userCredentials.save(credentialRecord); CredentialRecord newCredentialRecord = ImmutableCredentialRecord.fromCredentialRecord(credentialRecord) - .userEntityUserId(Bytes.random()) - .credentialId(Bytes.random()) + .userEntityUserId(TestBytes.get()) + .credentialId(TestBytes.get()) .build(); this.userCredentials.save(newCredentialRecord); assertThat(this.userCredentials.findByCredentialId(credentialRecord.getCredentialId())) diff --git a/web/src/test/java/org/springframework/security/web/webauthn/registration/DefaultWebAuthnRegistrationPageGeneratingFilterTests.java b/web/src/test/java/org/springframework/security/web/webauthn/registration/DefaultWebAuthnRegistrationPageGeneratingFilterTests.java index 03fe8d0fece..7f681cc1dc9 100644 --- a/web/src/test/java/org/springframework/security/web/webauthn/registration/DefaultWebAuthnRegistrationPageGeneratingFilterTests.java +++ b/web/src/test/java/org/springframework/security/web/webauthn/registration/DefaultWebAuthnRegistrationPageGeneratingFilterTests.java @@ -31,10 +31,10 @@ import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.security.web.csrf.CsrfToken; import org.springframework.security.web.csrf.DefaultCsrfToken; -import org.springframework.security.web.webauthn.api.Bytes; import org.springframework.security.web.webauthn.api.ImmutableCredentialRecord; import org.springframework.security.web.webauthn.api.ImmutablePublicKeyCredentialUserEntity; import org.springframework.security.web.webauthn.api.PublicKeyCredentialUserEntity; +import org.springframework.security.web.webauthn.api.TestBytes; import org.springframework.security.web.webauthn.api.TestCredentialRecord; import org.springframework.security.web.webauthn.management.PublicKeyCredentialUserEntityRepository; import org.springframework.security.web.webauthn.management.UserCredentialRepository; @@ -88,7 +88,7 @@ void doFilterWhenNotMatchThenNoInteractions() throws Exception { void doFilterThenCsrfDataAttrsPresent() throws Exception { PublicKeyCredentialUserEntity userEntity = ImmutablePublicKeyCredentialUserEntity.builder() .name("user") - .id(Bytes.random()) + .id(TestBytes.get()) .displayName("User") .build(); given(this.userEntities.findByUsername(any())).willReturn(userEntity); @@ -115,7 +115,7 @@ void doFilterWhenNullPublicKeyCredentialUserEntityThenNoResults() throws Excepti void doFilterWhenNoCredentialsThenNoResults() throws Exception { PublicKeyCredentialUserEntity userEntity = ImmutablePublicKeyCredentialUserEntity.builder() .name("user") - .id(Bytes.random()) + .id(TestBytes.get()) .displayName("User") .build(); given(this.userEntities.findByUsername(any())).willReturn(userEntity); @@ -129,7 +129,7 @@ void doFilterWhenNoCredentialsThenNoResults() throws Exception { void doFilterWhenResultsThenDisplayed() throws Exception { PublicKeyCredentialUserEntity userEntity = ImmutablePublicKeyCredentialUserEntity.builder() .name("user") - .id(Bytes.random()) + .id(TestBytes.get()) .displayName("User") .build(); @@ -225,7 +225,7 @@ void doFilterWhenResultsContainEntitiesThenEncoded() throws Exception { assertThat(label).isNotEqualTo(htmlEncodedLabel); PublicKeyCredentialUserEntity userEntity = ImmutablePublicKeyCredentialUserEntity.builder() .name("user") - .id(Bytes.random()) + .id(TestBytes.get()) .displayName("User") .build(); ImmutableCredentialRecord credential = TestCredentialRecord.userCredential().label(label).build(); @@ -240,7 +240,7 @@ void doFilterWhenResultsContainEntitiesThenEncoded() throws Exception { void doFilterWhenContextEmptyThenUrlsEmptyPrefix() throws Exception { PublicKeyCredentialUserEntity userEntity = ImmutablePublicKeyCredentialUserEntity.builder() .name("user") - .id(Bytes.random()) + .id(TestBytes.get()) .displayName("User") .build(); ImmutableCredentialRecord credential = TestCredentialRecord.userCredential().build(); @@ -256,7 +256,7 @@ void doFilterWhenContextEmptyThenUrlsEmptyPrefix() throws Exception { void doFilterWhenContextNotEmptyThenUrlsPrefixed() throws Exception { PublicKeyCredentialUserEntity userEntity = ImmutablePublicKeyCredentialUserEntity.builder() .name("user") - .id(Bytes.random()) + .id(TestBytes.get()) .displayName("User") .build(); ImmutableCredentialRecord credential = TestCredentialRecord.userCredential().build(); From 1cbe6ac932c88feceba56d4bb23f87c9206d9a87 Mon Sep 17 00:00:00 2001 From: Rob Winch <362503+rwinch@users.noreply.github.com> Date: Tue, 21 Jan 2025 13:38:07 -0600 Subject: [PATCH 44/87] checkstyleNohttp maxHeapSize=1g --- build.gradle | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/build.gradle b/build.gradle index 60089e6734f..4fd368b54a9 100644 --- a/build.gradle +++ b/build.gradle @@ -110,6 +110,10 @@ nohttp { source.builtBy(project(':spring-security-config').tasks.withType(RncToXsd)) } +tasks.named('checkstyleNohttp') { + maxHeapSize = '1g' +} + tasks.register('cloneRepository', IncludeRepoTask) { repository = project.getProperties().get("repositoryName") ref = project.getProperties().get("ref") From 028c212be438eaeff233f663839f46340078dc91 Mon Sep 17 00:00:00 2001 From: Daniel Garnier-Moiroux Date: Tue, 21 Jan 2025 22:49:14 +0100 Subject: [PATCH 45/87] fix flakey test in WebAuthnWebDriverTests Closes gh-16463 Signed-off-by: Daniel Garnier-Moiroux --- .../annotation/configurers/WebAuthnWebDriverTests.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/config/src/integration-test/java/org/springframework/security/config/annotation/configurers/WebAuthnWebDriverTests.java b/config/src/integration-test/java/org/springframework/security/config/annotation/configurers/WebAuthnWebDriverTests.java index 075856f3a4a..cc5d7a3501f 100644 --- a/config/src/integration-test/java/org/springframework/security/config/annotation/configurers/WebAuthnWebDriverTests.java +++ b/config/src/integration-test/java/org/springframework/security/config/annotation/configurers/WebAuthnWebDriverTests.java @@ -33,6 +33,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.openqa.selenium.By; +import org.openqa.selenium.WebDriverException; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriverService; import org.openqa.selenium.chrome.ChromeOptions; @@ -273,12 +274,14 @@ private AbstractStringAssert assertHasAlertStartingWith(String alertType, Str /** * Await until the assertion passes. If the assertion fails, it will display the - * assertion error in stdout. + * assertion error in stdout. WebDriver-related exceptions are ignored, so that + * {@code assertion}s can interact with the page and be retried on error, e.g. + * {@code assertThat(this.driver.findElement(By.Id("some-id")).isNotNull()}. */ private void await(Supplier> assertion) { new FluentWait<>(this.driver).withTimeout(Duration.ofSeconds(2)) .pollingEvery(Duration.ofMillis(100)) - .ignoring(AssertionError.class) + .ignoring(AssertionError.class, WebDriverException.class) .until((d) -> { assertion.get(); return true; From bb8e757c4bd66eb650bdf05a008311e5505d3490 Mon Sep 17 00:00:00 2001 From: Daniel Garnier-Moiroux Date: Tue, 21 Jan 2025 15:45:57 +0100 Subject: [PATCH 46/87] Fix GenerateOneTimeTokenWebFilter double publish of chain.filter(...) closes gh-16458 Signed-off-by: Daniel Garnier-Moiroux --- .../server/authentication/ott/GenerateOneTimeTokenWebFilter.java | 1 - 1 file changed, 1 deletion(-) diff --git a/web/src/main/java/org/springframework/security/web/server/authentication/ott/GenerateOneTimeTokenWebFilter.java b/web/src/main/java/org/springframework/security/web/server/authentication/ott/GenerateOneTimeTokenWebFilter.java index 8301e17dcf2..170d1d0b680 100644 --- a/web/src/main/java/org/springframework/security/web/server/authentication/ott/GenerateOneTimeTokenWebFilter.java +++ b/web/src/main/java/org/springframework/security/web/server/authentication/ott/GenerateOneTimeTokenWebFilter.java @@ -58,7 +58,6 @@ public Mono filter(ServerWebExchange exchange, WebFilterChain chain) { // @formatter:off return this.matcher.matches(exchange) .filter(ServerWebExchangeMatcher.MatchResult::isMatch) - .switchIfEmpty(chain.filter(exchange).then(Mono.empty())) .then(exchange.getFormData()) .mapNotNull((data) -> data.getFirst(USERNAME)) .switchIfEmpty(chain.filter(exchange).then(Mono.empty())) From 211fa52649f3205a275e8f49d7b99089edee459e Mon Sep 17 00:00:00 2001 From: Steve Riesenberg <5248162+sjohnr@users.noreply.github.com> Date: Wed, 22 Jan 2025 16:47:41 -0600 Subject: [PATCH 47/87] Favor provided instances over shared objects Prior to this commit, providing oauth2Login() and oauth2Client() with clientRegistrationRepository() and authorizedClientRepository() caused objects to be shared across both configurers. These configurers will now prefer explicitly provided instances of those objects when they are available. Closes gh-16105 --- .../oauth2/client/OAuth2ClientConfigurer.java | 27 +++++- .../oauth2/client/OAuth2LoginConfigurer.java | 27 ++++-- .../client/OAuth2ClientConfigurerTests.java | 93 ++++++++++++++++++- .../client/OAuth2LoginConfigurerTests.java | 68 +++++++++++++- 4 files changed, 201 insertions(+), 14 deletions(-) diff --git a/config/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/client/OAuth2ClientConfigurer.java b/config/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/client/OAuth2ClientConfigurer.java index 24b24909c99..3af7db6d02f 100644 --- a/config/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/client/OAuth2ClientConfigurer.java +++ b/config/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/client/OAuth2ClientConfigurer.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2023 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -98,6 +98,10 @@ public final class OAuth2ClientConfigurer> private AuthorizationCodeGrantConfigurer authorizationCodeGrantConfigurer = new AuthorizationCodeGrantConfigurer(); + private ClientRegistrationRepository clientRegistrationRepository; + + private OAuth2AuthorizedClientRepository authorizedClientRepository; + /** * Sets the repository of client registrations. * @param clientRegistrationRepository the repository of client registrations @@ -107,6 +111,7 @@ public OAuth2ClientConfigurer clientRegistrationRepository( ClientRegistrationRepository clientRegistrationRepository) { Assert.notNull(clientRegistrationRepository, "clientRegistrationRepository cannot be null"); this.getBuilder().setSharedObject(ClientRegistrationRepository.class, clientRegistrationRepository); + this.clientRegistrationRepository = clientRegistrationRepository; return this; } @@ -119,6 +124,7 @@ public OAuth2ClientConfigurer authorizedClientRepository( OAuth2AuthorizedClientRepository authorizedClientRepository) { Assert.notNull(authorizedClientRepository, "authorizedClientRepository cannot be null"); this.getBuilder().setSharedObject(OAuth2AuthorizedClientRepository.class, authorizedClientRepository); + this.authorizedClientRepository = authorizedClientRepository; return this; } @@ -283,8 +289,7 @@ private OAuth2AuthorizationRequestResolver getAuthorizationRequestResolver() { if (this.authorizationRequestResolver != null) { return this.authorizationRequestResolver; } - ClientRegistrationRepository clientRegistrationRepository = OAuth2ClientConfigurerUtils - .getClientRegistrationRepository(getBuilder()); + ClientRegistrationRepository clientRegistrationRepository = getClientRegistrationRepository(getBuilder()); return new DefaultOAuth2AuthorizationRequestResolver(clientRegistrationRepository, OAuth2AuthorizationRequestRedirectFilter.DEFAULT_AUTHORIZATION_REQUEST_BASE_URI); } @@ -292,8 +297,8 @@ private OAuth2AuthorizationRequestResolver getAuthorizationRequestResolver() { private OAuth2AuthorizationCodeGrantFilter createAuthorizationCodeGrantFilter(B builder) { AuthenticationManager authenticationManager = builder.getSharedObject(AuthenticationManager.class); OAuth2AuthorizationCodeGrantFilter authorizationCodeGrantFilter = new OAuth2AuthorizationCodeGrantFilter( - OAuth2ClientConfigurerUtils.getClientRegistrationRepository(builder), - OAuth2ClientConfigurerUtils.getAuthorizedClientRepository(builder), authenticationManager); + getClientRegistrationRepository(builder), getAuthorizedClientRepository(builder), + authenticationManager); if (this.authorizationRequestRepository != null) { authorizationCodeGrantFilter.setAuthorizationRequestRepository(this.authorizationRequestRepository); } @@ -315,6 +320,18 @@ private OAuth2AccessTokenResponseClient get return (bean != null) ? bean : new DefaultAuthorizationCodeTokenResponseClient(); } + private ClientRegistrationRepository getClientRegistrationRepository(B builder) { + return (OAuth2ClientConfigurer.this.clientRegistrationRepository != null) + ? OAuth2ClientConfigurer.this.clientRegistrationRepository + : OAuth2ClientConfigurerUtils.getClientRegistrationRepository(builder); + } + + private OAuth2AuthorizedClientRepository getAuthorizedClientRepository(B builder) { + return (OAuth2ClientConfigurer.this.authorizedClientRepository != null) + ? OAuth2ClientConfigurer.this.authorizedClientRepository + : OAuth2ClientConfigurerUtils.getAuthorizedClientRepository(builder); + } + @SuppressWarnings("unchecked") private T getBeanOrNull(ResolvableType type) { ApplicationContext context = getBuilder().getSharedObject(ApplicationContext.class); diff --git a/config/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/client/OAuth2LoginConfigurer.java b/config/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/client/OAuth2LoginConfigurer.java index a6b5f7c52bf..913a8f1211e 100644 --- a/config/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/client/OAuth2LoginConfigurer.java +++ b/config/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/client/OAuth2LoginConfigurer.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2024 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -172,6 +172,10 @@ public final class OAuth2LoginConfigurer> private String loginProcessingUrl = OAuth2LoginAuthenticationFilter.DEFAULT_FILTER_PROCESSES_URI; + private ClientRegistrationRepository clientRegistrationRepository; + + private OAuth2AuthorizedClientRepository authorizedClientRepository; + /** * Sets the repository of client registrations. * @param clientRegistrationRepository the repository of client registrations @@ -181,6 +185,7 @@ public OAuth2LoginConfigurer clientRegistrationRepository( ClientRegistrationRepository clientRegistrationRepository) { Assert.notNull(clientRegistrationRepository, "clientRegistrationRepository cannot be null"); this.getBuilder().setSharedObject(ClientRegistrationRepository.class, clientRegistrationRepository); + this.clientRegistrationRepository = clientRegistrationRepository; return this; } @@ -194,6 +199,7 @@ public OAuth2LoginConfigurer authorizedClientRepository( OAuth2AuthorizedClientRepository authorizedClientRepository) { Assert.notNull(authorizedClientRepository, "authorizedClientRepository cannot be null"); this.getBuilder().setSharedObject(OAuth2AuthorizedClientRepository.class, authorizedClientRepository); + this.authorizedClientRepository = authorizedClientRepository; return this; } @@ -339,8 +345,7 @@ public OAuth2LoginConfigurer userInfoEndpoint(Customizer getJwtDecoderFactoryBean() { ResolvableType type = ResolvableType.forClassWithGenerics(JwtDecoderFactory.class, ClientRegistration.class); @@ -529,8 +543,7 @@ private void initDefaultLoginFilter(B http) { @SuppressWarnings("unchecked") private Map getLoginLinks() { Iterable clientRegistrations = null; - ClientRegistrationRepository clientRegistrationRepository = OAuth2ClientConfigurerUtils - .getClientRegistrationRepository(this.getBuilder()); + ClientRegistrationRepository clientRegistrationRepository = this.getClientRegistrationRepository(); ResolvableType type = ResolvableType.forInstance(clientRegistrationRepository).as(Iterable.class); if (type != ResolvableType.NONE && ClientRegistration.class.isAssignableFrom(type.resolveGenerics()[0])) { clientRegistrations = (Iterable) clientRegistrationRepository; diff --git a/config/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/client/OAuth2ClientConfigurerTests.java b/config/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/client/OAuth2ClientConfigurerTests.java index 41e74807cdb..83dacaa265b 100644 --- a/config/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/client/OAuth2ClientConfigurerTests.java +++ b/config/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/client/OAuth2ClientConfigurerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2022 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -75,6 +75,7 @@ import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoInteractions; import static org.springframework.security.config.Customizer.withDefaults; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.authentication; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.user; @@ -285,6 +286,49 @@ public void configureWhenCustomAuthorizationRedirectStrategySetThenAuthorization verify(authorizationRedirectStrategy).sendRedirect(any(), any(), anyString()); } + @Test + public void configureWhenOAuth2LoginBeansConfiguredThenNotShared() throws Exception { + this.spring.register(OAuth2ClientConfigWithOAuth2Login.class).autowire(); + // Setup the Authorization Request in the session + Map attributes = new HashMap<>(); + attributes.put(OAuth2ParameterNames.REGISTRATION_ID, this.registration1.getRegistrationId()); + // @formatter:off + OAuth2AuthorizationRequest authorizationRequest = OAuth2AuthorizationRequest.authorizationCode() + .authorizationUri(this.registration1.getProviderDetails().getAuthorizationUri()) + .clientId(this.registration1.getClientId()) + .redirectUri("http://localhost/client-1") + .state("state") + .attributes(attributes) + .build(); + // @formatter:on + AuthorizationRequestRepository authorizationRequestRepository = new HttpSessionOAuth2AuthorizationRequestRepository(); + MockHttpServletRequest request = new MockHttpServletRequest("GET", ""); + MockHttpServletResponse response = new MockHttpServletResponse(); + authorizationRequestRepository.saveAuthorizationRequest(authorizationRequest, request, response); + MockHttpSession session = (MockHttpSession) request.getSession(); + String principalName = "user1"; + TestingAuthenticationToken authentication = new TestingAuthenticationToken(principalName, "password"); + // @formatter:off + MockHttpServletRequestBuilder clientRequest = get("/client-1") + .param(OAuth2ParameterNames.CODE, "code") + .param(OAuth2ParameterNames.STATE, "state") + .with(authentication(authentication)) + .session(session); + this.mockMvc.perform(clientRequest) + .andExpect(status().is3xxRedirection()) + .andExpect(redirectedUrl("http://localhost/client-1")); + // @formatter:on + OAuth2AuthorizedClient authorizedClient = authorizedClientRepository + .loadAuthorizedClient(this.registration1.getRegistrationId(), authentication, request); + assertThat(authorizedClient).isNotNull(); + // Ensure shared objects set for OAuth2 Client are not used + ClientRegistrationRepository clientRegistrationRepository = this.spring.getContext() + .getBean(ClientRegistrationRepository.class); + OAuth2AuthorizedClientRepository authorizedClientRepository = this.spring.getContext() + .getBean(OAuth2AuthorizedClientRepository.class); + verifyNoInteractions(clientRegistrationRepository, authorizedClientRepository); + } + @EnableWebSecurity @Configuration @EnableWebMvc @@ -362,4 +406,51 @@ OAuth2AuthorizedClientRepository authorizedClientRepository() { } + @Configuration + @EnableWebSecurity + @EnableWebMvc + static class OAuth2ClientConfigWithOAuth2Login { + + private final ClientRegistrationRepository clientRegistrationRepository = mock( + ClientRegistrationRepository.class); + + private final OAuth2AuthorizedClientRepository authorizedClientRepository = mock( + OAuth2AuthorizedClientRepository.class); + + @Bean + SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + // @formatter:off + http + .authorizeHttpRequests((authorize) -> authorize + .anyRequest().authenticated() + ) + .oauth2Client((oauth2Client) -> oauth2Client + .clientRegistrationRepository(OAuth2ClientConfigurerTests.clientRegistrationRepository) + .authorizedClientService(OAuth2ClientConfigurerTests.authorizedClientService) + .authorizationCodeGrant((authorizationCode) -> authorizationCode + .authorizationRequestResolver(authorizationRequestResolver) + .authorizationRedirectStrategy(authorizationRedirectStrategy) + .accessTokenResponseClient(accessTokenResponseClient) + ) + ) + .oauth2Login((oauth2Login) -> oauth2Login + .clientRegistrationRepository(this.clientRegistrationRepository) + .authorizedClientRepository(this.authorizedClientRepository) + ); + // @formatter:on + return http.build(); + } + + @Bean + ClientRegistrationRepository clientRegistrationRepository() { + return this.clientRegistrationRepository; + } + + @Bean + OAuth2AuthorizedClientRepository authorizedClientRepository() { + return this.authorizedClientRepository; + } + + } + } diff --git a/config/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/client/OAuth2LoginConfigurerTests.java b/config/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/client/OAuth2LoginConfigurerTests.java index b56d047a5f7..dfe6fea28fd 100644 --- a/config/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/client/OAuth2LoginConfigurerTests.java +++ b/config/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/client/OAuth2LoginConfigurerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2024 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -73,7 +73,9 @@ import org.springframework.security.oauth2.client.userinfo.OAuth2UserService; import org.springframework.security.oauth2.client.web.AuthorizationRequestRepository; import org.springframework.security.oauth2.client.web.HttpSessionOAuth2AuthorizationRequestRepository; +import org.springframework.security.oauth2.client.web.HttpSessionOAuth2AuthorizedClientRepository; import org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestResolver; +import org.springframework.security.oauth2.client.web.OAuth2AuthorizedClientRepository; import org.springframework.security.oauth2.core.OAuth2AccessToken; import org.springframework.security.oauth2.core.endpoint.OAuth2AccessTokenResponse; import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest; @@ -115,6 +117,7 @@ import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoInteractions; import static org.springframework.security.config.annotation.SecurityContextChangedListenerArgumentMatchers.setAuthentication; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.authentication; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf; @@ -669,6 +672,30 @@ public void oauth2LoginWhenDefaultsThenNoOidcSessionRegistry() { .collect(Collectors.toList())).isEmpty(); } + @Test + public void oidcLoginWhenOAuth2ClientBeansConfiguredThenNotShared() throws Exception { + this.spring.register(OAuth2LoginConfigWithOAuth2Client.class, JwtDecoderFactoryConfig.class).autowire(); + OAuth2AuthorizationRequest authorizationRequest = createOAuth2AuthorizationRequest("openid"); + this.authorizationRequestRepository.saveAuthorizationRequest(authorizationRequest, this.request, this.response); + this.request.setParameter("code", "code123"); + this.request.setParameter("state", authorizationRequest.getState()); + this.springSecurityFilterChain.doFilter(this.request, this.response, this.filterChain); + Authentication authentication = this.securityContextRepository + .loadContext(new HttpRequestResponseHolder(this.request, this.response)) + .getAuthentication(); + assertThat(authentication.getAuthorities()).hasSize(1); + assertThat(authentication.getAuthorities()).first() + .isInstanceOf(OidcUserAuthority.class) + .hasToString("OIDC_USER"); + + // Ensure shared objects set for OAuth2 Client are not used + ClientRegistrationRepository clientRegistrationRepository = this.spring.getContext() + .getBean(ClientRegistrationRepository.class); + OAuth2AuthorizedClientRepository authorizedClientRepository = this.spring.getContext() + .getBean(OAuth2AuthorizedClientRepository.class); + verifyNoInteractions(clientRegistrationRepository, authorizedClientRepository); + } + private void loadConfig(Class... configs) { AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext(); applicationContext.register(configs); @@ -1192,6 +1219,45 @@ SecurityFilterChain filterChain(HttpSecurity http) throws Exception { } + @Configuration + @EnableWebSecurity + static class OAuth2LoginConfigWithOAuth2Client extends CommonLambdaSecurityFilterChainConfig { + + private final ClientRegistrationRepository clientRegistrationRepository = mock( + ClientRegistrationRepository.class); + + private final OAuth2AuthorizedClientRepository authorizedClientRepository = mock( + OAuth2AuthorizedClientRepository.class); + + @Bean + SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { + // @formatter:off + http + .oauth2Login((oauth2Login) -> oauth2Login + .clientRegistrationRepository( + new InMemoryClientRegistrationRepository(GOOGLE_CLIENT_REGISTRATION)) + .authorizedClientRepository(new HttpSessionOAuth2AuthorizedClientRepository()) + ) + .oauth2Client((oauth2Client) -> oauth2Client + .clientRegistrationRepository(this.clientRegistrationRepository) + .authorizedClientRepository(this.authorizedClientRepository) + ); + // @formatter:on + return super.configureFilterChain(http); + } + + @Bean + ClientRegistrationRepository clientRegistrationRepository() { + return this.clientRegistrationRepository; + } + + @Bean + OAuth2AuthorizedClientRepository authorizedClientRepository() { + return this.authorizedClientRepository; + } + + } + private abstract static class CommonSecurityFilterChainConfig { SecurityFilterChain configureFilterChain(HttpSecurity http) throws Exception { From 751b5580a129f9b3a1da02c7f49bffd6ed35ef32 Mon Sep 17 00:00:00 2001 From: Rob Winch <362503+rwinch@users.noreply.github.com> Date: Thu, 23 Jan 2025 12:43:22 -0600 Subject: [PATCH 48/87] TestOneTimeTokenGenerationSuccessHandler.lastToken to non-static variable Previously there were race conditions on the static member lastToken of TestOneTimeTokenGenerationSuccessHandler. This is because the tests run in parallel and one test may override the other tests lastToken and thus make the assertion on it incorrect. This commit changes lastToken to be a non-static variable to ensure that each test has it's own lastToken for asserting the expected value. Closes gh-16471 --- .../ott/OneTimeTokenLoginConfigurerTests.java | 46 ++++++++++++++----- .../web/OneTimeTokenLoginDslTests.kt | 37 ++++++++++----- 2 files changed, 60 insertions(+), 23 deletions(-) diff --git a/config/src/test/java/org/springframework/security/config/annotation/web/configurers/ott/OneTimeTokenLoginConfigurerTests.java b/config/src/test/java/org/springframework/security/config/annotation/web/configurers/ott/OneTimeTokenLoginConfigurerTests.java index f89a37ae40f..72474ee8258 100644 --- a/config/src/test/java/org/springframework/security/config/annotation/web/configurers/ott/OneTimeTokenLoginConfigurerTests.java +++ b/config/src/test/java/org/springframework/security/config/annotation/web/configurers/ott/OneTimeTokenLoginConfigurerTests.java @@ -72,7 +72,7 @@ void oneTimeTokenWhenCorrectTokenThenCanAuthenticate() throws Exception { this.mvc.perform(post("/ott/generate").param("username", "user").with(csrf())) .andExpectAll(status().isFound(), redirectedUrl("/login/ott")); - String token = TestOneTimeTokenGenerationSuccessHandler.lastToken.getTokenValue(); + String token = getLastToken().getTokenValue(); this.mvc.perform(post("/login/ott").param("token", token).with(csrf())) .andExpectAll(status().isFound(), redirectedUrl("/"), authenticated()); @@ -84,7 +84,7 @@ void oneTimeTokenWhenDifferentAuthenticationUrlsThenCanAuthenticate() throws Exc this.mvc.perform(post("/generateurl").param("username", "user").with(csrf())) .andExpectAll(status().isFound(), redirectedUrl("/redirected")); - String token = TestOneTimeTokenGenerationSuccessHandler.lastToken.getTokenValue(); + String token = getLastToken().getTokenValue(); this.mvc.perform(post("/loginprocessingurl").param("token", token).with(csrf())) .andExpectAll(status().isFound(), redirectedUrl("/authenticated"), authenticated()); @@ -96,7 +96,7 @@ void oneTimeTokenWhenCorrectTokenUsedTwiceThenSecondTimeFails() throws Exception this.mvc.perform(post("/ott/generate").param("username", "user").with(csrf())) .andExpectAll(status().isFound(), redirectedUrl("/login/ott")); - String token = TestOneTimeTokenGenerationSuccessHandler.lastToken.getTokenValue(); + String token = getLastToken().getTokenValue(); this.mvc.perform(post("/login/ott").param("token", token).with(csrf())) .andExpectAll(status().isFound(), redirectedUrl("/"), authenticated()); @@ -194,25 +194,37 @@ Please provide it as a bean or pass it to the oneTimeTokenLogin() DSL. """); } + private OneTimeToken getLastToken() { + OneTimeToken lastToken = this.spring.getContext() + .getBean(TestOneTimeTokenGenerationSuccessHandler.class).lastToken; + return lastToken; + } + @Configuration(proxyBeanMethods = false) @EnableWebSecurity @Import(UserDetailsServiceConfig.class) static class OneTimeTokenDefaultConfig { @Bean - SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { + SecurityFilterChain securityFilterChain(HttpSecurity http, + OneTimeTokenGenerationSuccessHandler ottSuccessHandler) throws Exception { // @formatter:off http .authorizeHttpRequests((authz) -> authz .anyRequest().authenticated() ) .oneTimeTokenLogin((ott) -> ott - .tokenGenerationSuccessHandler(new TestOneTimeTokenGenerationSuccessHandler()) + .tokenGenerationSuccessHandler(ottSuccessHandler) ); // @formatter:on return http.build(); } + @Bean + TestOneTimeTokenGenerationSuccessHandler ottSuccessHandler() { + return new TestOneTimeTokenGenerationSuccessHandler(); + } + } @Configuration(proxyBeanMethods = false) @@ -221,7 +233,8 @@ SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { static class OneTimeTokenDifferentUrlsConfig { @Bean - SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { + SecurityFilterChain securityFilterChain(HttpSecurity http, + OneTimeTokenGenerationSuccessHandler ottSuccessHandler) throws Exception { // @formatter:off http .authorizeHttpRequests((authz) -> authz @@ -229,7 +242,7 @@ SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { ) .oneTimeTokenLogin((ott) -> ott .tokenGeneratingUrl("/generateurl") - .tokenGenerationSuccessHandler(new TestOneTimeTokenGenerationSuccessHandler("/redirected")) + .tokenGenerationSuccessHandler(ottSuccessHandler) .loginProcessingUrl("/loginprocessingurl") .authenticationSuccessHandler(new SimpleUrlAuthenticationSuccessHandler("/authenticated")) ); @@ -237,6 +250,11 @@ SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { return http.build(); } + @Bean + TestOneTimeTokenGenerationSuccessHandler ottSuccessHandler() { + return new TestOneTimeTokenGenerationSuccessHandler("/redirected"); + } + } @Configuration(proxyBeanMethods = false) @@ -245,7 +263,8 @@ SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { static class OneTimeTokenFormLoginConfig { @Bean - SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { + SecurityFilterChain securityFilterChain(HttpSecurity http, + OneTimeTokenGenerationSuccessHandler ottSuccessHandler) throws Exception { // @formatter:off http .authorizeHttpRequests((authz) -> authz @@ -253,12 +272,17 @@ SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { ) .formLogin(Customizer.withDefaults()) .oneTimeTokenLogin((ott) -> ott - .tokenGenerationSuccessHandler(new TestOneTimeTokenGenerationSuccessHandler()) + .tokenGenerationSuccessHandler(ottSuccessHandler) ); // @formatter:on return http.build(); } + @Bean + TestOneTimeTokenGenerationSuccessHandler ottSuccessHandler() { + return new TestOneTimeTokenGenerationSuccessHandler(); + } + } @Configuration(proxyBeanMethods = false) @@ -282,7 +306,7 @@ SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { static class TestOneTimeTokenGenerationSuccessHandler implements OneTimeTokenGenerationSuccessHandler { - private static OneTimeToken lastToken; + private OneTimeToken lastToken; private final OneTimeTokenGenerationSuccessHandler delegate; @@ -297,7 +321,7 @@ static class TestOneTimeTokenGenerationSuccessHandler implements OneTimeTokenGen @Override public void handle(HttpServletRequest request, HttpServletResponse response, OneTimeToken oneTimeToken) throws IOException, ServletException { - lastToken = oneTimeToken; + this.lastToken = oneTimeToken; this.delegate.handle(request, response, oneTimeToken); } diff --git a/config/src/test/kotlin/org/springframework/security/config/annotation/web/OneTimeTokenLoginDslTests.kt b/config/src/test/kotlin/org/springframework/security/config/annotation/web/OneTimeTokenLoginDslTests.kt index 07833e283f9..3df274b513f 100644 --- a/config/src/test/kotlin/org/springframework/security/config/annotation/web/OneTimeTokenLoginDslTests.kt +++ b/config/src/test/kotlin/org/springframework/security/config/annotation/web/OneTimeTokenLoginDslTests.kt @@ -69,7 +69,7 @@ class OneTimeTokenLoginDslTests { .redirectedUrl("/login/ott") ) - val token = TestOneTimeTokenGenerationSuccessHandler.lastToken?.tokenValue + val token = getLastToken().tokenValue this.mockMvc.perform( MockMvcRequestBuilders.post("/login/ott").param("token", token) @@ -91,7 +91,7 @@ class OneTimeTokenLoginDslTests { ) .andExpectAll(MockMvcResultMatchers.status().isFound(), MockMvcResultMatchers.redirectedUrl("/redirected")) - val token = TestOneTimeTokenGenerationSuccessHandler.lastToken?.tokenValue + val token = getLastToken().tokenValue this.mockMvc.perform( MockMvcRequestBuilders.post("/loginprocessingurl").param("token", token) @@ -104,25 +104,36 @@ class OneTimeTokenLoginDslTests { ) } + private fun getLastToken(): OneTimeToken { + val lastToken: OneTimeToken = spring.context + .getBean(TestOneTimeTokenGenerationSuccessHandler::class.java).lastToken!! + return lastToken + } + @Configuration @EnableWebSecurity @Import(UserDetailsServiceConfig::class) open class OneTimeTokenConfig { @Bean - open fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + open fun securityFilterChain(http: HttpSecurity, ottSuccessHandler: OneTimeTokenGenerationSuccessHandler): SecurityFilterChain { // @formatter:off http { authorizeHttpRequests { authorize(anyRequest, authenticated) } oneTimeTokenLogin { - oneTimeTokenGenerationSuccessHandler = TestOneTimeTokenGenerationSuccessHandler() + oneTimeTokenGenerationSuccessHandler = ottSuccessHandler } } // @formatter:on return http.build() } + + @Bean + open fun ottSuccessHandler(): TestOneTimeTokenGenerationSuccessHandler { + return TestOneTimeTokenGenerationSuccessHandler() + } } @EnableWebSecurity @@ -130,7 +141,7 @@ class OneTimeTokenLoginDslTests { @Import(UserDetailsServiceConfig::class) open class OneTimeTokenDifferentUrlsConfig { @Bean - open fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + open fun securityFilterChain(http: HttpSecurity, ottSuccessHandler: OneTimeTokenGenerationSuccessHandler): SecurityFilterChain { // @formatter:off http { authorizeHttpRequests { @@ -138,7 +149,7 @@ class OneTimeTokenLoginDslTests { } oneTimeTokenLogin { tokenGeneratingUrl = "/generateurl" - oneTimeTokenGenerationSuccessHandler = TestOneTimeTokenGenerationSuccessHandler("/redirected") + oneTimeTokenGenerationSuccessHandler = ottSuccessHandler loginProcessingUrl = "/loginprocessingurl" authenticationSuccessHandler = SimpleUrlAuthenticationSuccessHandler("/authenticated") } @@ -146,6 +157,11 @@ class OneTimeTokenLoginDslTests { // @formatter:on return http.build() } + + @Bean + open fun ottSuccessHandler(): TestOneTimeTokenGenerationSuccessHandler { + return TestOneTimeTokenGenerationSuccessHandler("/redirected") + } } @Configuration(proxyBeanMethods = false) @@ -156,9 +172,10 @@ class OneTimeTokenLoginDslTests { InMemoryUserDetailsManager(PasswordEncodedUser.user(), PasswordEncodedUser.admin()) } - private class TestOneTimeTokenGenerationSuccessHandler : + class TestOneTimeTokenGenerationSuccessHandler : OneTimeTokenGenerationSuccessHandler { private val delegate: OneTimeTokenGenerationSuccessHandler + var lastToken: OneTimeToken? = null constructor() { this.delegate = @@ -175,12 +192,8 @@ class OneTimeTokenLoginDslTests { } override fun handle(request: HttpServletRequest, response: HttpServletResponse, oneTimeToken: OneTimeToken) { - lastToken = oneTimeToken + this.lastToken = oneTimeToken delegate.handle(request, response, oneTimeToken) } - - companion object { - var lastToken: OneTimeToken? = null - } } } From e557c7227bc981f1b4af60352ac3bcd0e0213113 Mon Sep 17 00:00:00 2001 From: Tran Ngoc Nhan Date: Sat, 18 Jan 2025 16:26:40 +0700 Subject: [PATCH 49/87] Implement Serializable for WebAuthnAuthentication Closes gh-16273 Closes gh-16285 Signed-off-by: Tran Ngoc Nhan --- ...gSecurityCoreVersionSerializableTests.java | 20 ++++++++++++++++++ ...security.web.webauthn.api.Bytes.serialized | Bin 0 -> 140 bytes ...lePublicKeyCredentialUserEntity.serialized | Bin 0 -> 361 bytes ...tication.WebAuthnAuthentication.serialized | Bin 0 -> 1185 bytes .../security/web/webauthn/api/Bytes.java | 9 ++++++-- ...mmutablePublicKeyCredentialUserEntity.java | 7 +++++- .../api/PublicKeyCredentialUserEntity.java | 6 ++++-- .../WebAuthnAuthentication.java | 6 +++++- 8 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.Bytes.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.ImmutablePublicKeyCredentialUserEntity.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.authentication.WebAuthnAuthentication.serialized diff --git a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java index 359a7d48809..443c6749c40 100644 --- a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java +++ b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java @@ -191,6 +191,12 @@ import org.springframework.security.web.firewall.RequestRejectedException; import org.springframework.security.web.server.firewall.ServerExchangeRejectedException; import org.springframework.security.web.session.HttpSessionCreatedEvent; +import org.springframework.security.web.webauthn.api.Bytes; +import org.springframework.security.web.webauthn.api.ImmutablePublicKeyCredentialUserEntity; +import org.springframework.security.web.webauthn.api.PublicKeyCredentialUserEntity; +import org.springframework.security.web.webauthn.api.TestBytes; +import org.springframework.security.web.webauthn.api.TestPublicKeyCredentialUserEntity; +import org.springframework.security.web.webauthn.authentication.WebAuthnAuthentication; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; @@ -508,6 +514,20 @@ class SpringSecurityCoreVersionSerializableTests { (r) -> new AuthenticationSwitchUserEvent(authentication, user)); generatorByClassName.put(HttpSessionCreatedEvent.class, (r) -> new HttpSessionCreatedEvent(new MockHttpSession())); + + // webauthn + generatorByClassName.put(Bytes.class, (r) -> TestBytes.get()); + generatorByClassName.put(ImmutablePublicKeyCredentialUserEntity.class, + (r) -> TestPublicKeyCredentialUserEntity.userEntity().id(TestBytes.get()).build()); + generatorByClassName.put(WebAuthnAuthentication.class, (r) -> { + PublicKeyCredentialUserEntity userEntity = TestPublicKeyCredentialUserEntity.userEntity() + .id(TestBytes.get()) + .build(); + List authorities = AuthorityUtils.createAuthorityList("ROLE_USER"); + WebAuthnAuthentication webAuthnAuthentication = new WebAuthnAuthentication(userEntity, authorities); + webAuthnAuthentication.setDetails(details); + return webAuthnAuthentication; + }); } @ParameterizedTest diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.Bytes.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.Bytes.serialized new file mode 100644 index 0000000000000000000000000000000000000000..483bef50163c6c74df8c3f3b9024d2e64c6efd16 GIT binary patch literal 140 zcmZ4UmVvdnh`~6&C|$3(peQphJ*_A)H?=&!C|j>MHMz7Xv!qh5JT(b~6H7}n^7Il5 zGWDD)OHzw3HEy%lIJQ8aiGeYifi(#vRKma%?Nm`vS_Gokd=~$~#u4&>iGiV_fPsNQ mVPR74gn8@Lf9}jb$Iae<>Mhe`PD2BojzjI;t_F(j);$1UUNiXs literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.ImmutablePublicKeyCredentialUserEntity.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.ImmutablePublicKeyCredentialUserEntity.serialized new file mode 100644 index 0000000000000000000000000000000000000000..eb662f4843a91a70b7f1537902d6a33e280849d7 GIT binary patch literal 361 zcmZ4UmVvdnh#@4uC|$3(peQphJ*_A)H?=&!C|j>MHMz7Xv!qh5JT(b~6H7}n^7Il5 zGW9%jb4yDSlX6l6N|SOjlf6?bor_XaQu9hO6LUg~Q;S@ItdhzL?tc7_EaVEA7?^z+ zxKlEV3vv=G{eY&IFbMf%C6*=X=OpH(>j#&BthM%GV9HD>VKDUpIz=DNDf%#{=mVVr z!eFQ91D&GpR9TW*4Ajh$2Q;{lp^kyEqM(Fk)qn2HKgZ49f9fsM XWKKf^osL88-L3|T?bbaYSFr#9#{z=r literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.authentication.WebAuthnAuthentication.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.authentication.WebAuthnAuthentication.serialized new file mode 100644 index 0000000000000000000000000000000000000000..a5baa210e663a1243b774d38bbdd7daf80fbe8c0 GIT binary patch literal 1185 zcmb7D&r20i6h3d>Qxh?zKxvT_^uvYBC=mp25%1aKB~BXtAV?_g%v|m2ogdzNCudqn z(!!vqpjC^awjs1C2wJsBD2T9sAX?|DMF|C+J1=`G^u&R=Gjryg?|kRG-(6XUCMjSv z6f>rb1Pf-S1@Y-ZDCSH_-B>V{nhVs?H;L7?z|<=Z6myAUVPIaOPD#i0QV+kWb`6(S zf8R17XG5#Tby-BXf(tfwvUYT`Hal6^Mc-K`i$u)27(1M~!!#Wf)YJHcPf98(_@>fg zBB0uk`3|xrM=C*FwVmulI7fre&wCexs<+>O{AFn0Qb#=-+VppbS}-aVblJ1yIUKJfC}z0OR(0>_Ag&Mj?qj-I}6cer|+LuI)6;mVJm3^eD?!y@F92uU5Rqm+ao zsYXwh)($^fC6Duv8-jvlH)s+8KyIO+S1c+w6y6O5&8(tTOU-fSN1Rp#2^96T`dJu} z@G^L9N)d9pUAb|k4T;JrXdN51D_1ASD`Sb~-G&6tHza^A`j1uXEy zP|=d-2`Z)T)s7C9_>Ox#MmDP7}Lw+H|*x?ly;fKUR9r8`}I+b)@6# znVxyHCR)*BGU6m1!BhH|oxwZ>r}ucU%Bi9fJzEGif%H^`7!McDacXaKWMFGcug>LK;T`u0$<8}W5{HLY5 literal 0 HcmV?d00001 diff --git a/web/src/main/java/org/springframework/security/web/webauthn/api/Bytes.java b/web/src/main/java/org/springframework/security/web/webauthn/api/Bytes.java index 6fbcc3596c6..6c96a11efd8 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/api/Bytes.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/api/Bytes.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2024 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,8 @@ package org.springframework.security.web.webauthn.api; +import java.io.Serial; +import java.io.Serializable; import java.security.SecureRandom; import java.util.Arrays; import java.util.Base64; @@ -28,7 +30,10 @@ * @author Rob Winch * @since 6.4 */ -public final class Bytes { +public final class Bytes implements Serializable { + + @Serial + private static final long serialVersionUID = -3278138671365709777L; private static final SecureRandom RANDOM = new SecureRandom(); diff --git a/web/src/main/java/org/springframework/security/web/webauthn/api/ImmutablePublicKeyCredentialUserEntity.java b/web/src/main/java/org/springframework/security/web/webauthn/api/ImmutablePublicKeyCredentialUserEntity.java index 3b2fe5adfa0..a383967f7db 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/api/ImmutablePublicKeyCredentialUserEntity.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/api/ImmutablePublicKeyCredentialUserEntity.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2024 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,8 @@ package org.springframework.security.web.webauthn.api; +import java.io.Serial; + /** * PublicKeyCredentialUserEntity @@ -28,6 +30,9 @@ */ public final class ImmutablePublicKeyCredentialUserEntity implements PublicKeyCredentialUserEntity { + @Serial + private static final long serialVersionUID = -3438693960347279759L; + /** * When inherited by PublicKeyCredentialUserEntity, it is a human-palatable identifier * for a user account. It is intended only for display, i.e., aiding the user in diff --git a/web/src/main/java/org/springframework/security/web/webauthn/api/PublicKeyCredentialUserEntity.java b/web/src/main/java/org/springframework/security/web/webauthn/api/PublicKeyCredentialUserEntity.java index fd95a24c715..b3d1b9a86ac 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/api/PublicKeyCredentialUserEntity.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/api/PublicKeyCredentialUserEntity.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2024 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,8 @@ package org.springframework.security.web.webauthn.api; +import java.io.Serializable; + /** * PublicKeyCredentialUserEntity @@ -27,7 +29,7 @@ * @since 6.4 * @see org.springframework.security.web.webauthn.management.WebAuthnRelyingPartyOperations#authenticate(org.springframework.security.web.webauthn.management.RelyingPartyAuthenticationRequest) */ -public interface PublicKeyCredentialUserEntity { +public interface PublicKeyCredentialUserEntity extends Serializable { /** * The Date: Thu, 23 Jan 2025 16:41:24 -0700 Subject: [PATCH 50/87] Support Serialization Issue gh-16276 --- ...gSecurityCoreVersionSerializableTests.java | 21 ++++++++++++++++++ ...savedrequest.SimpleSavedRequest.serialized | Bin 0 -> 1022 bytes .../web/savedrequest/SimpleSavedRequest.java | 4 ++++ 3 files changed, 25 insertions(+) create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.savedrequest.SimpleSavedRequest.serialized diff --git a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java index 443c6749c40..ecac0f4da55 100644 --- a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java +++ b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java @@ -36,11 +36,13 @@ import java.util.Date; import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; +import jakarta.servlet.http.Cookie; import org.apereo.cas.client.validation.AssertionImpl; import org.instancio.Instancio; import org.instancio.InstancioApi; @@ -54,6 +56,7 @@ import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider; import org.springframework.core.type.filter.AssignableTypeFilter; +import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpSession; import org.springframework.security.access.AccessDeniedException; import org.springframework.security.access.AuthorizationServiceException; @@ -174,6 +177,7 @@ import org.springframework.security.saml2.provider.service.authentication.TestSaml2Authentications; import org.springframework.security.saml2.provider.service.authentication.TestSaml2PostAuthenticationRequests; import org.springframework.security.saml2.provider.service.authentication.TestSaml2RedirectAuthenticationRequests; +import org.springframework.security.web.PortResolverImpl; import org.springframework.security.web.authentication.WebAuthenticationDetails; import org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken; import org.springframework.security.web.authentication.preauth.PreAuthenticatedCredentialsNotFoundException; @@ -189,8 +193,11 @@ import org.springframework.security.web.csrf.InvalidCsrfTokenException; import org.springframework.security.web.csrf.MissingCsrfTokenException; import org.springframework.security.web.firewall.RequestRejectedException; +import org.springframework.security.web.savedrequest.DefaultSavedRequest; +import org.springframework.security.web.savedrequest.SimpleSavedRequest; import org.springframework.security.web.server.firewall.ServerExchangeRejectedException; import org.springframework.security.web.session.HttpSessionCreatedEvent; +import org.springframework.security.web.util.UrlUtils; import org.springframework.security.web.webauthn.api.Bytes; import org.springframework.security.web.webauthn.api.ImmutablePublicKeyCredentialUserEntity; import org.springframework.security.web.webauthn.api.PublicKeyCredentialUserEntity; @@ -514,6 +521,20 @@ class SpringSecurityCoreVersionSerializableTests { (r) -> new AuthenticationSwitchUserEvent(authentication, user)); generatorByClassName.put(HttpSessionCreatedEvent.class, (r) -> new HttpSessionCreatedEvent(new MockHttpSession())); + generatorByClassName.put(SimpleSavedRequest.class, (r) -> { + MockHttpServletRequest request = new MockHttpServletRequest("GET", "/uri"); + request.setQueryString("query=string"); + request.setScheme("https"); + request.setServerName("localhost"); + request.setServerPort(80); + request.setRequestURI("/uri"); + request.setCookies(new Cookie("name", "value")); + request.addHeader("header", "value"); + request.addParameter("parameter", "value"); + request.setPathInfo("/path"); + request.addPreferredLocale(Locale.ENGLISH); + return new SimpleSavedRequest(new DefaultSavedRequest(request, new PortResolverImpl(), "continue")); + }); // webauthn generatorByClassName.put(Bytes.class, (r) -> TestBytes.get()); diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.savedrequest.SimpleSavedRequest.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.savedrequest.SimpleSavedRequest.serialized new file mode 100644 index 0000000000000000000000000000000000000000..58449b0e225938c89ba127cfa45d72b240900838 GIT binary patch literal 1022 zcmYk5K~L0B5XXm>U0@-B)r5;dJ*Wqjt``qV5C{R>q$b8i6C(#6-C| zJjOf$fT7N?UiqgpJ7QNz5-ftuLL|p0N}Od=*Smw`x7p_N&lcEBA&7ytQYxsKVmM+d zbG!?sOoVA+7?$b@%eqA5swWPA-d6``~EqT=d#J8^>7M3 zE-VX$^+;i)0tzxb`JrQPJl(ka<)a0VCq;b(<%aGp5|p+@s4%C3nr#D|vjPLCw}tW< zwKQ^k_UGqVnUgnI{X2EFr)|XO!0|er-Ok5YF_e#IBys z1Qo5-d~qg+^+rRBHxQ=HDkDxVc^)P->vGwtXcdAF#BlYE?$}Jz&x@&-5L|J(bxn9q5VfNa}x=B9PZ_rqOxKp0sM`je9fqu`uIePHz u`^=Ly(^f61PNr45q9;||tkuk2@?%9czQqfCab cookies = new ArrayList<>(); From d7921daa13ccc33d025f8c5de851820121f93e1e Mon Sep 17 00:00:00 2001 From: Josh Cummings <3627351+jzheaux@users.noreply.github.com> Date: Thu, 23 Jan 2025 16:44:10 -0700 Subject: [PATCH 51/87] Support Serialization for SecurityConfig Issue gh-16276 --- ...pringSecurityCoreVersionSerializableTests.java | 2 ++ ...work.security.access.SecurityConfig.serialized | Bin 0 -> 109 bytes .../security/access/SecurityConfig.java | 4 ++++ .../access/annotation/Jsr250SecurityConfig.java | 1 + 4 files changed, 7 insertions(+) create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.access.SecurityConfig.serialized diff --git a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java index ecac0f4da55..49e800cae04 100644 --- a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java +++ b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java @@ -60,6 +60,7 @@ import org.springframework.mock.web.MockHttpSession; import org.springframework.security.access.AccessDeniedException; import org.springframework.security.access.AuthorizationServiceException; +import org.springframework.security.access.SecurityConfig; import org.springframework.security.access.intercept.RunAsUserToken; import org.springframework.security.authentication.AbstractAuthenticationToken; import org.springframework.security.authentication.AccountExpiredException; @@ -442,6 +443,7 @@ class SpringSecurityCoreVersionSerializableTests { generatorByClassName.put(JaasAuthenticationSuccessEvent.class, (r) -> new JaasAuthenticationSuccessEvent(authentication)); generatorByClassName.put(AbstractSessionEvent.class, (r) -> new AbstractSessionEvent(securityContext)); + generatorByClassName.put(SecurityConfig.class, (r) -> new SecurityConfig("value")); // cas generatorByClassName.put(CasServiceTicketAuthenticationToken.class, (r) -> { diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.access.SecurityConfig.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.access.SecurityConfig.serialized new file mode 100644 index 0000000000000000000000000000000000000000..ae659612d7304086cc379fafb84075a5e5d1f7db GIT binary patch literal 109 zcmZ4UmVvdnh`}hoC|$3(peQphJ*_A)H?=&!C|j>MHMz7Xv!qflF*!N4xL7Y3%6HDs zOUq23^C9;|nf9jwCI&_y2DZeKlA_F{5(Xikti-ZJ{hY+Sbp2qUP+q!qML`JzYguAW GX(|8>RVfkx literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/springframework/security/access/SecurityConfig.java b/core/src/main/java/org/springframework/security/access/SecurityConfig.java index 3079174e529..2cbc640b3ad 100644 --- a/core/src/main/java/org/springframework/security/access/SecurityConfig.java +++ b/core/src/main/java/org/springframework/security/access/SecurityConfig.java @@ -16,6 +16,7 @@ package org.springframework.security.access; +import java.io.Serial; import java.util.ArrayList; import java.util.List; @@ -29,6 +30,9 @@ */ public class SecurityConfig implements ConfigAttribute { + @Serial + private static final long serialVersionUID = -7138084564199804304L; + private final String attrib; public SecurityConfig(String config) { diff --git a/core/src/main/java/org/springframework/security/access/annotation/Jsr250SecurityConfig.java b/core/src/main/java/org/springframework/security/access/annotation/Jsr250SecurityConfig.java index 3a3ccdf91e7..f129fdbe176 100644 --- a/core/src/main/java/org/springframework/security/access/annotation/Jsr250SecurityConfig.java +++ b/core/src/main/java/org/springframework/security/access/annotation/Jsr250SecurityConfig.java @@ -30,6 +30,7 @@ * @deprecated Use {@link AuthorizationManagerBeforeMethodInterceptor#jsr250()} instead */ @Deprecated +@SuppressWarnings("serial") public class Jsr250SecurityConfig extends SecurityConfig { public static final Jsr250SecurityConfig PERMIT_ALL_ATTRIBUTE = new Jsr250SecurityConfig(PermitAll.class.getName()); From 3e4ba737e7a600eb9b90956d061e81a86c79b84d Mon Sep 17 00:00:00 2001 From: Josh Cummings <3627351+jzheaux@users.noreply.github.com> Date: Thu, 23 Jan 2025 16:46:38 -0700 Subject: [PATCH 52/87] Don't Support Serialzation of Deprecated Access Classes Issue gh-16276 --- .../expression/method/PostInvocationExpressionAttribute.java | 1 + .../expression/method/PreInvocationExpressionAttribute.java | 1 + .../aopalliance/MethodSecurityMetadataSourceAdvisor.java | 1 + 3 files changed, 3 insertions(+) diff --git a/core/src/main/java/org/springframework/security/access/expression/method/PostInvocationExpressionAttribute.java b/core/src/main/java/org/springframework/security/access/expression/method/PostInvocationExpressionAttribute.java index 3dc86cc5a11..8642484a418 100644 --- a/core/src/main/java/org/springframework/security/access/expression/method/PostInvocationExpressionAttribute.java +++ b/core/src/main/java/org/springframework/security/access/expression/method/PostInvocationExpressionAttribute.java @@ -28,6 +28,7 @@ * instead */ @Deprecated +@SuppressWarnings("serial") class PostInvocationExpressionAttribute extends AbstractExpressionBasedMethodConfigAttribute implements PostInvocationAttribute { diff --git a/core/src/main/java/org/springframework/security/access/expression/method/PreInvocationExpressionAttribute.java b/core/src/main/java/org/springframework/security/access/expression/method/PreInvocationExpressionAttribute.java index 26af51a6f1e..41ec280bc77 100644 --- a/core/src/main/java/org/springframework/security/access/expression/method/PreInvocationExpressionAttribute.java +++ b/core/src/main/java/org/springframework/security/access/expression/method/PreInvocationExpressionAttribute.java @@ -28,6 +28,7 @@ * instead */ @Deprecated +@SuppressWarnings("serial") class PreInvocationExpressionAttribute extends AbstractExpressionBasedMethodConfigAttribute implements PreInvocationAttribute { diff --git a/core/src/main/java/org/springframework/security/access/intercept/aopalliance/MethodSecurityMetadataSourceAdvisor.java b/core/src/main/java/org/springframework/security/access/intercept/aopalliance/MethodSecurityMetadataSourceAdvisor.java index 4bc3d19b5bf..58174d9d1ae 100644 --- a/core/src/main/java/org/springframework/security/access/intercept/aopalliance/MethodSecurityMetadataSourceAdvisor.java +++ b/core/src/main/java/org/springframework/security/access/intercept/aopalliance/MethodSecurityMetadataSourceAdvisor.java @@ -54,6 +54,7 @@ * @deprecated Use {@link EnableMethodSecurity} or publish interceptors directly */ @Deprecated +@SuppressWarnings("serial") public class MethodSecurityMetadataSourceAdvisor extends AbstractPointcutAdvisor implements BeanFactoryAware { private transient MethodSecurityMetadataSource attributeSource; From 36716d12ba36fe2535179009137fa366ecd264ec Mon Sep 17 00:00:00 2001 From: Josh Cummings <3627351+jzheaux@users.noreply.github.com> Date: Thu, 23 Jan 2025 16:50:30 -0700 Subject: [PATCH 53/87] Serialization Support of Core Components Issue gh-16276 --- ...ringSecurityCoreVersionSerializableTests.java | 2 ++ ...e.context.TransientSecurityContext.serialized | Bin 0 -> 1294 bytes .../security/core/ComparableVersion.java | 1 + .../core/context/TransientSecurityContext.java | 5 +++++ 4 files changed, 8 insertions(+) create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.core.context.TransientSecurityContext.serialized diff --git a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java index 49e800cae04..0e1b23b646f 100644 --- a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java +++ b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java @@ -104,6 +104,7 @@ import org.springframework.security.core.authority.AuthorityUtils; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextImpl; +import org.springframework.security.core.context.TransientSecurityContext; import org.springframework.security.core.session.AbstractSessionEvent; import org.springframework.security.core.session.ReactiveSessionInformation; import org.springframework.security.core.session.SessionInformation; @@ -444,6 +445,7 @@ class SpringSecurityCoreVersionSerializableTests { (r) -> new JaasAuthenticationSuccessEvent(authentication)); generatorByClassName.put(AbstractSessionEvent.class, (r) -> new AbstractSessionEvent(securityContext)); generatorByClassName.put(SecurityConfig.class, (r) -> new SecurityConfig("value")); + generatorByClassName.put(TransientSecurityContext.class, (r) -> new TransientSecurityContext(authentication)); // cas generatorByClassName.put(CasServiceTicketAuthenticationToken.class, (r) -> { diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.core.context.TransientSecurityContext.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.core.context.TransientSecurityContext.serialized new file mode 100644 index 0000000000000000000000000000000000000000..5a4ccd07b4d0d97d12c13023f0eb3ea4b04079f6 GIT binary patch literal 1294 zcmb7E&ubGw6n^E==zAkwgOa=;@v zYuzw__(=z8NO_QFJ$ncH37=Vkyu z)|oM=Mr#tVt~y*MEYlv$_?owfB@2v&bKVZS$J~I)wp-oW;l3?-FiraUB4oi`*n=rl zsd5@d zYjMj&UycPtdf+E7gi zr@i)nxTMXcW!V3G`{(5tH02YkTl1qP=-#j688K;F@UBRfyM7n8F9=Sx9_HT$>CB;_c5Je0lz6zd?TmIzNLai^<8l z<{YcOzgmCs^6<&63|5g=H%_nBJY9>}s1?->nPyh$L_dTbWPvyoBMbQlQmOFaXjBVX Gn(_}s!NceP literal 0 HcmV?d00001 diff --git a/core/src/main/java/org/springframework/security/core/ComparableVersion.java b/core/src/main/java/org/springframework/security/core/ComparableVersion.java index 347644734c3..a517a4473d1 100644 --- a/core/src/main/java/org/springframework/security/core/ComparableVersion.java +++ b/core/src/main/java/org/springframework/security/core/ComparableVersion.java @@ -405,6 +405,7 @@ public String toString() { * Represents a version list item. This class is used both for the global item list * and for sub-lists (which start with '-(number)' in the version specification). */ + @SuppressWarnings("serial") private static class ListItem extends ArrayList implements Item { @Override diff --git a/core/src/main/java/org/springframework/security/core/context/TransientSecurityContext.java b/core/src/main/java/org/springframework/security/core/context/TransientSecurityContext.java index 0089ae455d0..7a4b3d30fe4 100644 --- a/core/src/main/java/org/springframework/security/core/context/TransientSecurityContext.java +++ b/core/src/main/java/org/springframework/security/core/context/TransientSecurityContext.java @@ -16,6 +16,8 @@ package org.springframework.security.core.context; +import java.io.Serial; + import org.springframework.security.core.Authentication; import org.springframework.security.core.Transient; @@ -30,6 +32,9 @@ @Transient public class TransientSecurityContext extends SecurityContextImpl { + @Serial + private static final long serialVersionUID = -7925492364422193347L; + public TransientSecurityContext() { } From e1e5970a246b52083ddb7cc3587698280b31e557 Mon Sep 17 00:00:00 2001 From: Josh Cummings <3627351+jzheaux@users.noreply.github.com> Date: Thu, 23 Jan 2025 16:55:30 -0700 Subject: [PATCH 54/87] Support Serialization for LDAP Components Issue gh-16276 --- ...pringSecurityCoreVersionSerializableTests.java | 7 +++++++ ....ldap.ppolicy.PasswordPolicyControl.serialized | Bin 0 -> 96 bytes ...olicy.PasswordPolicyResponseControl.serialized | Bin 0 -> 512 bytes .../ldap/ppolicy/PasswordPolicyControl.java | 5 +++++ .../ppolicy/PasswordPolicyResponseControl.java | 4 ++++ 5 files changed, 16 insertions(+) create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.ldap.ppolicy.PasswordPolicyControl.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.ldap.ppolicy.PasswordPolicyResponseControl.serialized diff --git a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java index 0e1b23b646f..85465f59d8b 100644 --- a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java +++ b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java @@ -110,8 +110,10 @@ import org.springframework.security.core.session.SessionInformation; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.security.ldap.ppolicy.PasswordPolicyControl; import org.springframework.security.ldap.ppolicy.PasswordPolicyErrorStatus; import org.springframework.security.ldap.ppolicy.PasswordPolicyException; +import org.springframework.security.ldap.ppolicy.PasswordPolicyResponseControl; import org.springframework.security.ldap.userdetails.LdapAuthority; import org.springframework.security.oauth2.client.ClientAuthorizationException; import org.springframework.security.oauth2.client.ClientAuthorizationRequiredException; @@ -470,6 +472,11 @@ class SpringSecurityCoreVersionSerializableTests { (r) -> new LdapAuthority("USER", "username", Map.of("attribute", List.of("value1", "value2")))); generatorByClassName.put(PasswordPolicyException.class, (r) -> new PasswordPolicyException(PasswordPolicyErrorStatus.INSUFFICIENT_PASSWORD_QUALITY)); + generatorByClassName.put(PasswordPolicyControl.class, (r) -> new PasswordPolicyControl(true)); + generatorByClassName.put(PasswordPolicyResponseControl.class, (r) -> { + byte[] encodedResponse = { 0x30, 0x05, (byte) 0xA0, 0x03, (byte) 0xA0, 0x1, 0x21 }; + return new PasswordPolicyResponseControl(encodedResponse); + }); // saml2-service-provider generatorByClassName.put(Saml2AuthenticationException.class, diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.ldap.ppolicy.PasswordPolicyControl.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.ldap.ppolicy.PasswordPolicyControl.serialized new file mode 100644 index 0000000000000000000000000000000000000000..51e783d58cf04c32fe63631115cce63f01a00412 GIT binary patch literal 96 zcmZ4UmVvdnh`~O;C|$3(peQphJ*_A)H?=&!C|j>MHMz7Xv!qflCnd2!ub?15Co{QH uFCekF7$}_*0OmU9=am%Y=ct!j>38*Q=3!!BjAGzO2I|U8PRyw&U<3gFp(BI< literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.ldap.ppolicy.PasswordPolicyResponseControl.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.ldap.ppolicy.PasswordPolicyResponseControl.serialized new file mode 100644 index 0000000000000000000000000000000000000000..911742c9818701cb092cf886a0e0901295caf660 GIT binary patch literal 512 zcmbV|ze)o^5QitH(SX511Z`8<-B~Ll`E!VHdLb7Km?A89n`8BEcbVPOOQYCY*x6VG zY}5GyK7KB4?e!%j6R^K5RL@Kwvxzr+((kqYk`-xqG5(i59}l& z(w0&rEF9QPqLhiF=5%dQB?VWsF1SXKyw;zd@7^8{ELc8<%@|2YJrOgmS~Mk$8@xGd zmeLyS3#4u?84}F|??RdKP((C3BS}UzSlyZjYZOsnpoz|u2G=u|&Ob}%$I_WtIx|b> zuciBo+0PLU7i~Lhxs&ZV_YW^+3kv5@3eAsLNRnI@ZpY&>08}!Z_>VrfzE(=@cMBkw z=DfOF94-wDl^cZmq6TwK3~@Re29L0QL9U3M5FXnu&(ir&YS?a8gP`NL8od+0(L43q Ly{hN=9k=lf=w`Jj literal 0 HcmV?d00001 diff --git a/ldap/src/main/java/org/springframework/security/ldap/ppolicy/PasswordPolicyControl.java b/ldap/src/main/java/org/springframework/security/ldap/ppolicy/PasswordPolicyControl.java index 84eb48cdf98..629513cc8b3 100755 --- a/ldap/src/main/java/org/springframework/security/ldap/ppolicy/PasswordPolicyControl.java +++ b/ldap/src/main/java/org/springframework/security/ldap/ppolicy/PasswordPolicyControl.java @@ -16,6 +16,8 @@ package org.springframework.security.ldap.ppolicy; +import java.io.Serial; + import javax.naming.ldap.Control; /** @@ -37,6 +39,9 @@ public class PasswordPolicyControl implements Control { */ public static final String OID = "1.3.6.1.4.1.42.2.27.8.5.1"; + @Serial + private static final long serialVersionUID = 2843242715616817932L; + private final boolean critical; /** diff --git a/ldap/src/main/java/org/springframework/security/ldap/ppolicy/PasswordPolicyResponseControl.java b/ldap/src/main/java/org/springframework/security/ldap/ppolicy/PasswordPolicyResponseControl.java index 2aa2b330e06..a6ac94590dd 100755 --- a/ldap/src/main/java/org/springframework/security/ldap/ppolicy/PasswordPolicyResponseControl.java +++ b/ldap/src/main/java/org/springframework/security/ldap/ppolicy/PasswordPolicyResponseControl.java @@ -19,6 +19,7 @@ import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; +import java.io.Serial; import netscape.ldap.ber.stream.BERChoice; import netscape.ldap.ber.stream.BERElement; @@ -53,6 +54,9 @@ public class PasswordPolicyResponseControl extends PasswordPolicyControl { private static final Log logger = LogFactory.getLog(PasswordPolicyResponseControl.class); + @Serial + private static final long serialVersionUID = -4592657167939234499L; + private final byte[] encodedValue; private PasswordPolicyErrorStatus errorStatus; From d6b295ba2c518ec8c3fe2ba50e18e7735dea3ba2 Mon Sep 17 00:00:00 2001 From: Josh Cummings <3627351+jzheaux@users.noreply.github.com> Date: Fri, 24 Jan 2025 11:25:26 -0700 Subject: [PATCH 55/87] S101 Depends On Assemble Closes gh-16482 --- .github/workflows/continuous-integration-workflow.yml | 2 +- buildSrc/src/main/java/s101/S101Plugin.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index 3c53a7532f8..8f6f478d227 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -79,7 +79,7 @@ jobs: env: STRUCTURE101_LICENSEID: ${{ secrets.STRUCTURE101_LICENSEID }} run: | - ./gradlew check s101 -Ps101.licenseId="$STRUCTURE101_LICENSEID" --stacktrace + ./gradlew assemble s101 -Ps101.licenseId="$STRUCTURE101_LICENSEID" --stacktrace deploy-artifacts: name: Deploy Artifacts needs: [ build, test, check-samples, check-tangles ] diff --git a/buildSrc/src/main/java/s101/S101Plugin.java b/buildSrc/src/main/java/s101/S101Plugin.java index 6d2e01abc0e..628b4ad52ab 100644 --- a/buildSrc/src/main/java/s101/S101Plugin.java +++ b/buildSrc/src/main/java/s101/S101Plugin.java @@ -50,7 +50,7 @@ private void configure(S101Configure configure) { private void configure(JavaExec exec) { exec.setDescription("Runs Structure101 headless analysis, installing and configuring if necessary"); - exec.dependsOn("check"); + exec.dependsOn("assemble"); Project project = exec.getProject(); S101PluginExtension extension = project.getExtensions().getByType(S101PluginExtension.class); exec From 43a2fbf5ad8759762ffcf410e47903d38d7b6714 Mon Sep 17 00:00:00 2001 From: Josh Cummings <3627351+jzheaux@users.noreply.github.com> Date: Fri, 24 Jan 2025 11:31:22 -0700 Subject: [PATCH 56/87] Ensure s101 Runs After Assemble Issue gh-16482 --- .github/workflows/continuous-integration-workflow.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index 8f6f478d227..b44c4fdff0e 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -79,7 +79,7 @@ jobs: env: STRUCTURE101_LICENSEID: ${{ secrets.STRUCTURE101_LICENSEID }} run: | - ./gradlew assemble s101 -Ps101.licenseId="$STRUCTURE101_LICENSEID" --stacktrace + ./gradlew assemble && ./gradlew s101 -Ps101.licenseId="$STRUCTURE101_LICENSEID" --stacktrace deploy-artifacts: name: Deploy Artifacts needs: [ build, test, check-samples, check-tangles ] From 28615e7f64aa6ad79ad7e109147f4164c5586aaa Mon Sep 17 00:00:00 2001 From: Josh Cummings <3627351+jzheaux@users.noreply.github.com> Date: Fri, 24 Jan 2025 11:47:40 -0700 Subject: [PATCH 57/87] Remove Stray Import --- .../security/SpringSecurityCoreVersionSerializableTests.java | 1 - 1 file changed, 1 deletion(-) diff --git a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java index 85465f59d8b..49348ba3a40 100644 --- a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java +++ b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java @@ -201,7 +201,6 @@ import org.springframework.security.web.savedrequest.SimpleSavedRequest; import org.springframework.security.web.server.firewall.ServerExchangeRejectedException; import org.springframework.security.web.session.HttpSessionCreatedEvent; -import org.springframework.security.web.util.UrlUtils; import org.springframework.security.web.webauthn.api.Bytes; import org.springframework.security.web.webauthn.api.ImmutablePublicKeyCredentialUserEntity; import org.springframework.security.web.webauthn.api.PublicKeyCredentialUserEntity; From 2de2e3803a554d5ddd779d515007ce7fc03f4250 Mon Sep 17 00:00:00 2001 From: Josh Cummings <3627351+jzheaux@users.noreply.github.com> Date: Mon, 27 Jan 2025 16:35:13 -0700 Subject: [PATCH 58/87] Update to Gradle 8.12.1 Closes gh-16485 --- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 8e876e1c557..d71047787f8 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=1541fa36599e12857140465f3c91a97409b4512501c26f9631fb113e392c5bd1 -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.1-bin.zip +distributionSha256Sum=8d97a97984f6cbd2b85fe4c60a743440a347544bf18818048e611f5288d46c94 +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From 7d5414b349f4b7b0e462cb13744be7798b3e7796 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Feb 2025 00:42:40 +0000 Subject: [PATCH 59/87] Bump @springio/asciidoctor-extensions in /docs Bumps [@springio/asciidoctor-extensions](https://github.com/spring-io/asciidoctor-extensions) from 1.0.0-alpha.14 to 1.0.0-alpha.16. - [Changelog](https://github.com/spring-io/asciidoctor-extensions/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/spring-io/asciidoctor-extensions/compare/v1.0.0-alpha.14...v1.0.0-alpha.16) --- updated-dependencies: - dependency-name: "@springio/asciidoctor-extensions" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- docs/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/package.json b/docs/package.json index 567c1f3a680..1e55982d930 100644 --- a/docs/package.json +++ b/docs/package.json @@ -5,6 +5,6 @@ "@antora/collector-extension": "1.0.1", "@asciidoctor/tabs": "1.0.0-beta.6", "@springio/antora-extensions": "1.14.2", - "@springio/asciidoctor-extensions": "1.0.0-alpha.14" + "@springio/asciidoctor-extensions": "1.0.0-alpha.16" } } From ca3c763c04cb9ded924a3b49dc4ba87b15a96b66 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Feb 2025 04:02:34 +0000 Subject: [PATCH 60/87] Bump org.hibernate.orm:hibernate-core from 6.6.5.Final to 6.6.6.Final Bumps [org.hibernate.orm:hibernate-core](https://github.com/hibernate/hibernate-orm) from 6.6.5.Final to 6.6.6.Final. - [Release notes](https://github.com/hibernate/hibernate-orm/releases) - [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.6/changelog.txt) - [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.5...6.6.6) --- updated-dependencies: - dependency-name: org.hibernate.orm:hibernate-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1761d5ca76d..d26a5cd72a7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -70,7 +70,7 @@ org-bouncycastle-bcprov-jdk15on = { module = "org.bouncycastle:bcprov-jdk18on", org-eclipse-jetty-jetty-server = { module = "org.eclipse.jetty:jetty-server", version.ref = "org-eclipse-jetty" } org-eclipse-jetty-jetty-servlet = { module = "org.eclipse.jetty:jetty-servlet", version.ref = "org-eclipse-jetty" } org-hamcrest = "org.hamcrest:hamcrest:2.2" -org-hibernate-orm-hibernate-core = "org.hibernate.orm:hibernate-core:6.6.5.Final" +org-hibernate-orm-hibernate-core = "org.hibernate.orm:hibernate-core:6.6.6.Final" org-hsqldb = "org.hsqldb:hsqldb:2.7.4" org-jetbrains-kotlin-kotlin-bom = { module = "org.jetbrains.kotlin:kotlin-bom", version.ref = "org-jetbrains-kotlin" } org-jetbrains-kotlin-kotlin-gradle-plugin = "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.25" From eb4befa28eb9b1889a3fab4593a99d591b54edd9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Feb 2025 04:02:13 +0000 Subject: [PATCH 61/87] Bump com.webauthn4j:webauthn4j-core Bumps [com.webauthn4j:webauthn4j-core](https://github.com/webauthn4j/webauthn4j) from 0.28.4.RELEASE to 0.28.5.RELEASE. - [Release notes](https://github.com/webauthn4j/webauthn4j/releases) - [Changelog](https://github.com/webauthn4j/webauthn4j/blob/master/github-release-notes-generator.yml) - [Commits](https://github.com/webauthn4j/webauthn4j/compare/0.28.4.RELEASE...0.28.5.RELEASE) --- updated-dependencies: - dependency-name: com.webauthn4j:webauthn4j-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d26a5cd72a7..52edea77142 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -107,7 +107,7 @@ org-jfrog-buildinfo-build-info-extractor-gradle = "org.jfrog.buildinfo:build-inf org-sonarsource-scanner-gradle-sonarqube-gradle-plugin = "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.8.0.1969" org-instancio-instancio-junit = "org.instancio:instancio-junit:3.7.1" -webauthn4j-core = 'com.webauthn4j:webauthn4j-core:0.28.4.RELEASE' +webauthn4j-core = 'com.webauthn4j:webauthn4j-core:0.28.5.RELEASE' [plugins] From bcc4b415b331f519025cbb763e60412fa3373c50 Mon Sep 17 00:00:00 2001 From: Tran Ngoc Nhan Date: Sat, 21 Dec 2024 17:37:48 +0700 Subject: [PATCH 62/87] Make RelyingPartyRegistration Serializable Closes gh-16286 --- ...ringSecurityCoreVersionSerializableTests.java | 10 ++++++++++ ...ity.saml2.core.Saml2X509Credential.serialized | Bin 0 -> 1623 bytes ...Registration$AssertingPartyDetails.serialized | Bin 0 -> 2621 bytes ...istration.RelyingPartyRegistration.serialized | Bin 0 -> 5861 bytes .../security/saml2/core/Saml2X509Credential.java | 7 +++++-- .../registration/AssertingPartyMetadata.java | 3 ++- .../registration/RelyingPartyRegistration.java | 9 +++++++-- 7 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.saml2.core.Saml2X509Credential.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.saml2.provider.service.registration.RelyingPartyRegistration$AssertingPartyDetails.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.saml2.provider.service.registration.RelyingPartyRegistration.serialized diff --git a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java index 49348ba3a40..aea7544c58d 100644 --- a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java +++ b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java @@ -173,6 +173,8 @@ import org.springframework.security.oauth2.server.resource.introspection.OAuth2IntrospectionException; import org.springframework.security.saml2.Saml2Exception; import org.springframework.security.saml2.core.Saml2Error; +import org.springframework.security.saml2.core.Saml2X509Credential; +import org.springframework.security.saml2.credentials.TestSaml2X509Credentials; import org.springframework.security.saml2.provider.service.authentication.DefaultSaml2AuthenticatedPrincipal; import org.springframework.security.saml2.provider.service.authentication.Saml2Authentication; import org.springframework.security.saml2.provider.service.authentication.Saml2AuthenticationException; @@ -181,6 +183,9 @@ import org.springframework.security.saml2.provider.service.authentication.TestSaml2Authentications; import org.springframework.security.saml2.provider.service.authentication.TestSaml2PostAuthenticationRequests; import org.springframework.security.saml2.provider.service.authentication.TestSaml2RedirectAuthenticationRequests; +import org.springframework.security.saml2.provider.service.registration.RelyingPartyRegistration; +import org.springframework.security.saml2.provider.service.registration.RelyingPartyRegistration.AssertingPartyDetails; +import org.springframework.security.saml2.provider.service.registration.TestRelyingPartyRegistrations; import org.springframework.security.web.PortResolverImpl; import org.springframework.security.web.authentication.WebAuthenticationDetails; import org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken; @@ -490,6 +495,11 @@ class SpringSecurityCoreVersionSerializableTests { (r) -> TestSaml2PostAuthenticationRequests.create()); generatorByClassName.put(Saml2RedirectAuthenticationRequest.class, (r) -> TestSaml2RedirectAuthenticationRequests.create()); + generatorByClassName.put(Saml2X509Credential.class, + (r) -> TestSaml2X509Credentials.relyingPartyVerifyingCredential()); + generatorByClassName.put(AssertingPartyDetails.class, + (r) -> TestRelyingPartyRegistrations.full().build().getAssertingPartyMetadata()); + generatorByClassName.put(RelyingPartyRegistration.class, (r) -> TestRelyingPartyRegistrations.full().build()); // web generatorByClassName.put(AnonymousAuthenticationToken.class, (r) -> { diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.saml2.core.Saml2X509Credential.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.saml2.core.Saml2X509Credential.serialized new file mode 100644 index 0000000000000000000000000000000000000000..736cb69fc1319f82d2711a50bcc62f723bdd2428 GIT binary patch literal 1623 zcmZ4UmVvdnh`~C)C|$3(peQphJ*_A)H?=&!C|j>MHMz7Xv!qh5I59WJNH00RC{-^Q z#EdXCuyig;O-aow$xO`o`0U%}O_{HnnHZRT7`T&Di%K%nGLsWaQcD4PNo!MYKutbG{xli`MiR2HNbmoV@{G?tcR=I95fmH^do0UcKcG}Jq_vV=hj&D;RE zoOMM3&^x*yYZ2}TS*z!auu=ty9h6$osh&0WlEe}q%gKjH5JXpfCd3Qd$I3v*xq-4>pdF2TTkM6$K0oEaC=DEW!p&OurW}GchtT zaWb@JGKvYNWhCZhW;+yQmgScu<^WX~ z$cghBni?1x85L*IiSrtPxIh5r4gnuDF)ASkJ0mLta}y&!gFzD`7gG}>Bg2lO zx^2QS-m4~;KlnL&&4TC&PmlJSE>OSrZ)x=`*WXplwSRX#5~yl#f3|#*rfBf=+U`s2 z#W!cH*Jlfley+9mcW88UzCiV7m6(l{rrT>&zS5LU4v;AVEH&;G;zxN5&lxja#htD7MSlu6SC3Z~w-uJCq z`BCLmeNiT6Mh3>k0S0~svcS|L%f}+dB69h}zoz1ePg&;G?L6vqAl-5iQ?ImvJV;uZ zMZ!R=0lNYokOE;ARs&{6#{bA+4ovF6FlS`YH`HTseEh#_YDLe(om1ZJ-`X(ypHdv- z?Y_AZDQdpVxwYTE1)NS3xvc-E{_y{_9jY;Vc6}C_*Khtbte(&1N$A>?yGAY9{$J(S zr&V43)oyks;orR8`jd)&)rCqb$~#M66l$5V%n-?ccGO;XqF351V~zU<4cvBdEqZr! z&+Ye`hGF}TgoJ*WcKPEO|KJ(>{TP&ePsGKkl=irsOwHP=Kk?|(_O86+ojPCNZ4SS1 zfn9fV+4=Y@y|0e(%Ed2Am)iR1?~Eq@m!6H`+fzaxRata1DK%d17LTq@y0CToblLLc zFjeRNx6@__H-6$gvb1Wx@*};bE%SAx4ezgC!m*m~ZeQ_>loAHk2t8n_2`rn$!DSPu zWYhD>%*#$q@klJr0G4q#a;`^By{jb$DoTnN1QDvB^1EDGr%v0k-Gmub)RgluFfa(% zI{--r2FAJ~hF}T`a1|_tI;b258xACdz%Jqgy9iVW>bd5X<|0cLlrZpwxdwT4QQ6aWAd4?b4_ literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.saml2.provider.service.registration.RelyingPartyRegistration$AssertingPartyDetails.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.saml2.provider.service.registration.RelyingPartyRegistration$AssertingPartyDetails.serialized new file mode 100644 index 0000000000000000000000000000000000000000..55aff67094f6c4b9a588a6ef4a357f01ebe114d2 GIT binary patch literal 2621 zcmdT`Yj6`)6u!Gj-zk(92!bt@1d&R1Hz}zC&d`z;sf4zZqz_vJ*W@x-Q&gbJ@DLx2fHI0$U{riig%L-vz8!p2LDT^s9g2#8_okGlOr3GYU+#~c-Fv=! z&OP7x&e`308pNpzkR-*+sInsXy|oJOgF#7YU{vT1C;|#ID(@35jI2nFf(I&iU1=2D zkWrvlP?5qTLGm*WD2DOwGG0MpM~uN(pkh4gHx)v}3!)k}cxHc@bIM7B0m2pejp#6`ytx^l}b_&Qky29EdaRm3V^?S2-Ei2o<4L=yQBk8Hg7u zBvV*IdQuLCl!LJg{s!oo!>e^ph&~lRsa|_LCyNFkq<|3vsLS^Kh4-ypx3^=e2HWMJ z4giogGauja6+%GA%cj11ngkDyVi?#zP;}MkjMfTCep0-gpC_l?vTeh98c=qS07dA- z9tMk{^saiWml+`$0dpNf@^qFB27^p6mmzhvaGaUtrm`WQ=)qz!`6LAz6qPrrb-cxz zw?qN1|J*M_l)o=&0MesO4U1+51?=p4R>D|6t1w02MQP-)8AN=7?X^L zT_ca+To}d)Ugfv!iVaHyr(=rNqCYG{!ZNmjkj9v22b3S2RKM}?^S9_|K-U1RhetfZ zPqXYmi|}a(VRT3iC}eGCkN)@gMAz4(Ib;B|dM={P;3D+-EgG7l=_Jr*-C_CZz!@)> z8lRMN|D5~JrBYN%9N=0vn^U-?cul!BK7%fI_P-?RXj`dyB$rMs3Az*;uObm1kN*<>t0rQbn{jxKhYv$-q+)#&u9K=h>I4RW2#xNCV?RvAHx zBKi-MM2#L%TgUr_hJ0CQln^gs1ec{xHCs80CD&q^YUOgP^{E!}im&MF{~&`1H6fOE zDh_BO)NsH>sAM`qQDCpKkJc=9Oc`o+sXNKij(-^IpP)_kAy>iP1T8Y!*0$2k9mu(jjviCIZ0S>nFe zKYyya>m^U;^y$_Md%NMf!s(ex>%qIN>5{(7yH(qnW0-Sa-fa2L>f5WTDs3O~g7%ST z^2gsuz0Vn!-f?YZ*~XTPmlu5F-F`aq#F*T?QI_sTef`?m480qV&zu7u0PYRMd?9jzVNb?9P5U2{UaY019M zS+9GiZKYR^w`RjsP;Wah!&tF2!<=rH(nL0BdHn1>as;wl=iln|+U- zIk0ExhKmyxP+zRtIL34RJdJO0Z*SSVwIjROzgph9RJ(WL{8#q(q;Fb%(}{|fVTIq7 zKj%4axwoP8?D$=^O&|T)mUraNi%;VPD|XqMST!`$*|z=S^Vf`L_oO1Te?#iP_6HL1s-(UFQ${*iO&04tCJ9ba^h4x7455=vO9iH;;rkj`36I#2L z>uZ|tI=ZK0eP+;IG10dA^t$$p*58s2KHaq0(9J|%+B{{P`Kw(|CGHq@e3g0%|H{Nw vG58N?sBw!wN6!B+ZjD2XU@|phKR9G&4aXnjiXunx>|$GitGKizB!~V6OyQY& literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.saml2.provider.service.registration.RelyingPartyRegistration.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.saml2.provider.service.registration.RelyingPartyRegistration.serialized new file mode 100644 index 0000000000000000000000000000000000000000..5640654bba1de9bab85d7ba701215b9edb52b565 GIT binary patch literal 5861 zcmeHLc~leU7XPvUf&tkCQCT!l6(pGif}*v80Tc;B2|*A<$7BeRY|IQ0pn&0FsS8kQ z71U>4>QZs5Rf2M{F(BmqtG7U#HSdI?Q;1QTS3s;f3JOb6Ig*-j3%T_5c9IoTp zDmli(F{O$iagoeOuzqBxlwXGXXbR%GzpF5@x*XAW>ev&eL99G01d5hNj1 zDYckF0$fl6iX?k>M`I+aKuMGYNfKxlzn@wB9<%tgS^OTe;5uy<-`p&I=zyXpOMqv$ zQk_<;(-K)4440brPg7|X&=e9R{CVwC%5l*cL7+;kTP{@X^=qmnIyvo35;#g0qS+{4 zjcS#ADM^I|?sHRMay(a0xjRvW1dDM@foVwb3POZk|6dT+$h+-jg zBNdsT5U?bGqlMv(R7B`-4N7*e*_penm(zuS@qwEA>7w?qC13;rNoq`@Q|hwFzOEyF zgQe$)-I}=rNQuJ;Jq!sHZSn@qYS06irn>)HntJz5lrWfsDm9VIRYbJ;-j*_f%^cvG zgKEjpffCpa)BZ|ex;@c92oBw@4OJ_3u)@+cFoO1G5tP8Xg0UMufOopnh!V^kI0}9I zCINrg#l8Bdx{T5GjcH$feK`8*8Tl+(yzJ}21i*j;hnHO4^oFp-D_0$;3uHmMK8FJUu%8+NpYUfO0SDFln-bn% zrGQ$vFZaK!3c_1T=Ps$!QjYe$KhFNuZELHTfFS`^m>SbS34Kd2X2C*OP?HUM5(v^s zQa_2$&&kQ*OpbgVUcm+;&>AHQ3oL42~a%`GoTv18lz94rYpG{RB;nT zlVJQG<2F?+l_X9i82&4J2tr3ggLR*k?Q+@Fe!8! zETHg!H`@-zuxlh7K< zr!0d$3y0KcJ3CzeWjQGRDpeeM0NAcbG200#X8yc^#bhv<)}U0hL-<4EJtbmmY3=*w zj5nXyG8ls`0AgG(7>rn3vSe&aC#Fo=^D>CT6vqgh5l4z*#ThI{2~v%D#p&c3f|1B@ zYSo70L^<6n9{L4VjTZ$A7~UgbFozi#FYrPla({*M$F^$0~T< z&~BesT6%NaJL85*s|uE#vm!25@8Mg{PQK-P=x14Svd%ug!#ibfuBh$}9}nxn9_sod zmp0F7-LGh#G)eUQKs&Z7Y?3=}Y*qZeln4a%U_KiqJoula!b^TYMf>u~%#j z@$_SyM!Xlz9XUI8U6Iqrsn?V>cZ)X;3kVu2Y|nOG_}JY?^o1Ayv#P|YHD`y#M>;$S z=~UGvZu`Q2Ofa627`pX%E2_POzOXOp6AbXFBnEf$LWSr#E3 z4|o>S+ilRdDxZ{h=5yO~SMrB4Sq#8 zPvF!6X8?wrlEJ2--1(&x)0jdj<&2ZgojL!l(WV)M4Uf*CJ?%z6J+i3nqX1wohR|$; z_5VFY=H0Vjt#M&Fw)9I^#8}dUr6y!{LL4Y89mKJj4F@8KxNu4lI3o7cq7}zF0oBTN zSrh`hBO|Ca8;-M-zPCYSHeJ`eq@mH09-$DR3B5T$>$|UceQ$R({7ytfferDojy!FkK z7Bs$@n@6D$w99JclF7#=dyn0Mj!wDNa&diXgT!xU~5J}x5cX0Je z6!2WvvT1((D~`eGUnn%e*9$+`ecpxjSmTyk6Xk~%#-#fHt+46Glz_q z;!BgOHasfhx^YUu7pPGU2Un$c0Ws6bh2!^;D-u_@)_5p7tRF; z1@;*iYN3eZjmuhJ|8X(ia?T5zN!;8$n5)UCn)5GX7;nhQBUg5w>PS2gc5Amy%6{MJ zmzzC?yxw&p6I6YZFvcTzO1(gSzmgden)m`Jn Date: Thu, 30 Jan 2025 18:05:17 -0700 Subject: [PATCH 63/87] Make Saml2AuthenticationToken Serializable Issue gh-16286 --- ...ringSecurityCoreVersionSerializableTests.java | 7 +++++++ ...ntication.Saml2AuthenticationToken.serialized | Bin 0 -> 6302 bytes .../TestSaml2AuthenticationTokens.java | 7 +++++++ 3 files changed, 14 insertions(+) create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.saml2.provider.service.authentication.Saml2AuthenticationToken.serialized diff --git a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java index aea7544c58d..2c806ce39f3 100644 --- a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java +++ b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java @@ -178,8 +178,10 @@ import org.springframework.security.saml2.provider.service.authentication.DefaultSaml2AuthenticatedPrincipal; import org.springframework.security.saml2.provider.service.authentication.Saml2Authentication; import org.springframework.security.saml2.provider.service.authentication.Saml2AuthenticationException; +import org.springframework.security.saml2.provider.service.authentication.Saml2AuthenticationToken; import org.springframework.security.saml2.provider.service.authentication.Saml2PostAuthenticationRequest; import org.springframework.security.saml2.provider.service.authentication.Saml2RedirectAuthenticationRequest; +import org.springframework.security.saml2.provider.service.authentication.TestSaml2AuthenticationTokens; import org.springframework.security.saml2.provider.service.authentication.TestSaml2Authentications; import org.springframework.security.saml2.provider.service.authentication.TestSaml2PostAuthenticationRequests; import org.springframework.security.saml2.provider.service.authentication.TestSaml2RedirectAuthenticationRequests; @@ -500,6 +502,11 @@ class SpringSecurityCoreVersionSerializableTests { generatorByClassName.put(AssertingPartyDetails.class, (r) -> TestRelyingPartyRegistrations.full().build().getAssertingPartyMetadata()); generatorByClassName.put(RelyingPartyRegistration.class, (r) -> TestRelyingPartyRegistrations.full().build()); + generatorByClassName.put(Saml2AuthenticationToken.class, (r) -> { + Saml2AuthenticationToken token = TestSaml2AuthenticationTokens.tokenRequested(); + token.setDetails(details); + return token; + }); // web generatorByClassName.put(AnonymousAuthenticationToken.class, (r) -> { diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.saml2.provider.service.authentication.Saml2AuthenticationToken.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.saml2.provider.service.authentication.Saml2AuthenticationToken.serialized new file mode 100644 index 0000000000000000000000000000000000000000..cdc6b6b25920853d28136f0fb16cfe8b61a78e81 GIT binary patch literal 6302 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 KaRJFbGXERwNZkYg literal 0 HcmV?d00001 diff --git a/saml2/saml2-service-provider/src/test/java/org/springframework/security/saml2/provider/service/authentication/TestSaml2AuthenticationTokens.java b/saml2/saml2-service-provider/src/test/java/org/springframework/security/saml2/provider/service/authentication/TestSaml2AuthenticationTokens.java index b0a0de264a3..bccbcb869e7 100644 --- a/saml2/saml2-service-provider/src/test/java/org/springframework/security/saml2/provider/service/authentication/TestSaml2AuthenticationTokens.java +++ b/saml2/saml2-service-provider/src/test/java/org/springframework/security/saml2/provider/service/authentication/TestSaml2AuthenticationTokens.java @@ -35,4 +35,11 @@ public static Saml2AuthenticationToken token() { return new Saml2AuthenticationToken(relyingPartyRegistration, "saml2-xml-response-object"); } + public static Saml2AuthenticationToken tokenRequested() { + RelyingPartyRegistration relyingPartyRegistration = TestRelyingPartyRegistrations.relyingPartyRegistration() + .build(); + return new Saml2AuthenticationToken(relyingPartyRegistration, "saml2-xml-response-object", + TestSaml2PostAuthenticationRequests.create()); + } + } From e31f04bebcafb9e35dadb2804792478a2c90ce3b Mon Sep 17 00:00:00 2001 From: NeoTraveler <55753029+NeoTraveler@users.noreply.github.com> Date: Mon, 3 Feb 2025 20:50:37 +0800 Subject: [PATCH 64/87] `withValue` used incorrectly Closes gh-16525 Closes gh-16527 Signed-off-by: NeoTraveler <55753029+NeoTraveler@users.noreply.github.com> --- .../web/authentication/ui/DefaultLoginPageGeneratingFilter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/src/main/java/org/springframework/security/web/authentication/ui/DefaultLoginPageGeneratingFilter.java b/web/src/main/java/org/springframework/security/web/authentication/ui/DefaultLoginPageGeneratingFilter.java index ae33768d38d..4aafd032223 100644 --- a/web/src/main/java/org/springframework/security/web/authentication/ui/DefaultLoginPageGeneratingFilter.java +++ b/web/src/main/java/org/springframework/security/web/authentication/ui/DefaultLoginPageGeneratingFilter.java @@ -286,7 +286,7 @@ private String renderFormLogin(HttpServletRequest request, boolean loginError, b .withValue("passwordParameter", this.passwordParameter) .withRawHtml("rememberMeInput", renderRememberMe(this.rememberMeParameter)) .withRawHtml("hiddenInputs", hiddenInputs) - .withValue("autocomplete", this.passkeysEnabled ? "autocomplete=\"password webauthn\"" : "") + .withRawHtml("autocomplete", this.passkeysEnabled ? "autocomplete=\"password webauthn\" " : "") .render(); } From 47fd6befdec6761d61b50a560e5665d1108d5a4c Mon Sep 17 00:00:00 2001 From: Josh Cummings <3627351+jzheaux@users.noreply.github.com> Date: Mon, 3 Feb 2025 12:34:43 -0700 Subject: [PATCH 65/87] Ensure Serialization Compatibility for AuthenticationException Issue gh-16286 --- .../security/core/AuthenticationException.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/src/main/java/org/springframework/security/core/AuthenticationException.java b/core/src/main/java/org/springframework/security/core/AuthenticationException.java index e634738b69b..9e1fb756086 100644 --- a/core/src/main/java/org/springframework/security/core/AuthenticationException.java +++ b/core/src/main/java/org/springframework/security/core/AuthenticationException.java @@ -16,6 +16,8 @@ package org.springframework.security.core; +import java.io.Serial; + /** * Abstract superclass for all exceptions related to an {@link Authentication} object * being invalid for whatever reason. @@ -24,6 +26,9 @@ */ public abstract class AuthenticationException extends RuntimeException { + @Serial + private static final long serialVersionUID = 2018827803361503060L; + /** * Constructs an {@code AuthenticationException} with the specified message and root * cause. From 002dbf355a9b7f5e25d4114302ac2902e1602910 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Feb 2025 03:51:53 +0000 Subject: [PATCH 66/87] Bump io.rsocket:rsocket-bom from 1.1.4 to 1.1.5 Bumps [io.rsocket:rsocket-bom](https://github.com/rsocket/rsocket-java) from 1.1.4 to 1.1.5. - [Release notes](https://github.com/rsocket/rsocket-java/releases) - [Commits](https://github.com/rsocket/rsocket-java/compare/1.1.4...1.1.5) --- updated-dependencies: - dependency-name: io.rsocket:rsocket-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b339342be02..6fa972dc279 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] com-squareup-okhttp3 = "3.14.9" -io-rsocket = "1.1.4" +io-rsocket = "1.1.5" io-spring-javaformat = "0.0.43" io-spring-nohttp = "0.0.11" jakarta-websocket = "2.1.1" From 876f67715f40676b9976dd8a5a15a36060bc80c1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Feb 2025 04:11:15 +0000 Subject: [PATCH 67/87] Bump io.rsocket:rsocket-bom from 1.1.4 to 1.1.5 Bumps [io.rsocket:rsocket-bom](https://github.com/rsocket/rsocket-java) from 1.1.4 to 1.1.5. - [Release notes](https://github.com/rsocket/rsocket-java/releases) - [Commits](https://github.com/rsocket/rsocket-java/compare/1.1.4...1.1.5) --- updated-dependencies: - dependency-name: io.rsocket:rsocket-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 52edea77142..f4097bf2c50 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] com-squareup-okhttp3 = "3.14.9" -io-rsocket = "1.1.4" +io-rsocket = "1.1.5" io-spring-javaformat = "0.0.43" io-spring-nohttp = "0.0.11" jakarta-websocket = "2.2.0" From b4c7795699ee686c68ae6b05bd83d6a4ddf95155 Mon Sep 17 00:00:00 2001 From: Josh Cummings <3627351+jzheaux@users.noreply.github.com> Date: Wed, 5 Feb 2025 13:54:12 -0700 Subject: [PATCH 68/87] Support Serialization for Authorization Components Closes gh-16544 --- ...pringSecurityCoreVersionSerializableTests.java | 8 ++++++++ ...tion.AuthorityAuthorizationDecision.serialized | Bin 0 -> 400 bytes ...authorization.AuthorizationDecision.serialized | Bin 0 -> 96 bytes ...zation.AuthorizationDeniedException.serialized | 0 .../AuthorityAuthorizationDecision.java | 4 ++++ .../authorization/AuthorizationDecision.java | 5 +++++ .../authorization/AuthorizationManagers.java | 2 ++ .../authorization/AuthorizationResult.java | 4 +++- .../ExpressionAuthorizationDecision.java | 1 + 9 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.authorization.AuthorityAuthorizationDecision.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.authorization.AuthorizationDecision.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.authorization.AuthorizationDeniedException.serialized diff --git a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java index 2c806ce39f3..afc044effa4 100644 --- a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java +++ b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java @@ -95,6 +95,9 @@ import org.springframework.security.authentication.ott.InvalidOneTimeTokenException; import org.springframework.security.authentication.ott.OneTimeTokenAuthenticationToken; import org.springframework.security.authentication.password.CompromisedPasswordException; +import org.springframework.security.authorization.AuthorityAuthorizationDecision; +import org.springframework.security.authorization.AuthorizationDecision; +import org.springframework.security.authorization.AuthorizationDeniedException; import org.springframework.security.cas.authentication.CasAssertionAuthenticationToken; import org.springframework.security.cas.authentication.CasAuthenticationToken; import org.springframework.security.cas.authentication.CasServiceTicketAuthenticationToken; @@ -454,6 +457,11 @@ class SpringSecurityCoreVersionSerializableTests { generatorByClassName.put(AbstractSessionEvent.class, (r) -> new AbstractSessionEvent(securityContext)); generatorByClassName.put(SecurityConfig.class, (r) -> new SecurityConfig("value")); generatorByClassName.put(TransientSecurityContext.class, (r) -> new TransientSecurityContext(authentication)); + generatorByClassName.put(AuthorizationDeniedException.class, + (r) -> new AuthorizationDeniedException("message", new AuthorizationDecision(false))); + generatorByClassName.put(AuthorizationDecision.class, (r) -> new AuthorizationDecision(true)); + generatorByClassName.put(AuthorityAuthorizationDecision.class, + (r) -> new AuthorityAuthorizationDecision(true, AuthorityUtils.createAuthorityList("ROLE_USER"))); // cas generatorByClassName.put(CasServiceTicketAuthenticationToken.class, (r) -> { diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.authorization.AuthorityAuthorizationDecision.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.authorization.AuthorityAuthorizationDecision.serialized new file mode 100644 index 0000000000000000000000000000000000000000..ad5c632ccffb50b0a05ff874675b820a4a934c1e GIT binary patch literal 400 zcmZ4UmVvdnh`}?zC|$3(peQphJ*_A)H?=&!C|j>MHMz7Xv!qflv9u&3zbLaRu_QA; zPtOs;E2)GsAi^%G$(hAK=^l>+sSTMb222c$J`CJYoh6y6#U%`4K3R!niTb4_nK}B- z`8heM$sqHrD~cE#NVgu<*2`88b2$<_8GyD%F|el>CFYf+rc@L#0=*^-vQ!Ubsh(p| zQDUV}W^qYH<0aXd#}nr=GcbBGuoP!jrB)O$FfcHdvw%pTCMUcOO3p7zg#`*Qc!D!? z3vyE3A(p~J2WS!yFy(*)f~6=wC$)q@2oeH0iFxVz!6l&3wyr2BVc-n%_i>F64R#Hx F008nhjrITl literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.authorization.AuthorizationDecision.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.authorization.AuthorizationDecision.serialized new file mode 100644 index 0000000000000000000000000000000000000000..3992b0122aacc8328aaffd7c7538c96b3352f4fe GIT binary patch literal 96 zcmZ4UmVvdnh`}MhC|$3(peQphJ*_A)H?=&!C|j>MHMz7Xv!qflv9u&3zbLaRu_QA; oPtOsV=aQP7Sqv1tZ1pggBe9c#iGeYSfjzw_F|Q;wrJ{fl03x|0OaK4? literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.authorization.AuthorizationDeniedException.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.authorization.AuthorizationDeniedException.serialized new file mode 100644 index 00000000000..e69de29bb2d diff --git a/core/src/main/java/org/springframework/security/authorization/AuthorityAuthorizationDecision.java b/core/src/main/java/org/springframework/security/authorization/AuthorityAuthorizationDecision.java index f9dd43a7845..629dfa4a391 100644 --- a/core/src/main/java/org/springframework/security/authorization/AuthorityAuthorizationDecision.java +++ b/core/src/main/java/org/springframework/security/authorization/AuthorityAuthorizationDecision.java @@ -16,6 +16,7 @@ package org.springframework.security.authorization; +import java.io.Serial; import java.util.Collection; import org.springframework.security.core.GrantedAuthority; @@ -28,6 +29,9 @@ */ public class AuthorityAuthorizationDecision extends AuthorizationDecision { + @Serial + private static final long serialVersionUID = -8338309042331376592L; + private final Collection authorities; public AuthorityAuthorizationDecision(boolean granted, Collection authorities) { diff --git a/core/src/main/java/org/springframework/security/authorization/AuthorizationDecision.java b/core/src/main/java/org/springframework/security/authorization/AuthorizationDecision.java index bd873ecdb17..a428fc28d9c 100644 --- a/core/src/main/java/org/springframework/security/authorization/AuthorizationDecision.java +++ b/core/src/main/java/org/springframework/security/authorization/AuthorizationDecision.java @@ -16,12 +16,17 @@ package org.springframework.security.authorization; +import java.io.Serial; + /** * @author Rob Winch * @since 5.0 */ public class AuthorizationDecision implements AuthorizationResult { + @Serial + private static final long serialVersionUID = -3226018324649244416L; + private final boolean granted; public AuthorizationDecision(boolean granted) { diff --git a/core/src/main/java/org/springframework/security/authorization/AuthorizationManagers.java b/core/src/main/java/org/springframework/security/authorization/AuthorizationManagers.java index f3893c97433..d0de9bd647c 100644 --- a/core/src/main/java/org/springframework/security/authorization/AuthorizationManagers.java +++ b/core/src/main/java/org/springframework/security/authorization/AuthorizationManagers.java @@ -145,6 +145,7 @@ public static AuthorizationManager not(AuthorizationManager manager) { private AuthorizationManagers() { } + @SuppressWarnings("serial") private static final class CompositeAuthorizationDecision extends AuthorizationDecision { private final List results; @@ -161,6 +162,7 @@ public String toString() { } + @SuppressWarnings("serial") private static final class NotAuthorizationDecision extends AuthorizationDecision { private final AuthorizationResult result; diff --git a/core/src/main/java/org/springframework/security/authorization/AuthorizationResult.java b/core/src/main/java/org/springframework/security/authorization/AuthorizationResult.java index 11c5cd4a769..a98c61a3aa4 100644 --- a/core/src/main/java/org/springframework/security/authorization/AuthorizationResult.java +++ b/core/src/main/java/org/springframework/security/authorization/AuthorizationResult.java @@ -16,13 +16,15 @@ package org.springframework.security.authorization; +import java.io.Serializable; + /** * Represents an authorization result * * @author Marcus da Coregio * @since 6.3 */ -public interface AuthorizationResult { +public interface AuthorizationResult extends Serializable { /** * @return whether the access has been granted diff --git a/core/src/main/java/org/springframework/security/authorization/ExpressionAuthorizationDecision.java b/core/src/main/java/org/springframework/security/authorization/ExpressionAuthorizationDecision.java index 930b23a2ccb..54f5adbbc6f 100644 --- a/core/src/main/java/org/springframework/security/authorization/ExpressionAuthorizationDecision.java +++ b/core/src/main/java/org/springframework/security/authorization/ExpressionAuthorizationDecision.java @@ -24,6 +24,7 @@ * @author Marcus Da Coregio * @since 5.8 */ +@SuppressWarnings("serial") public class ExpressionAuthorizationDecision extends AuthorizationDecision { private final Expression expression; From 4776446b1415230eb951960dcaa5663f1db9d33c Mon Sep 17 00:00:00 2001 From: Josh Cummings <3627351+jzheaux@users.noreply.github.com> Date: Wed, 5 Feb 2025 15:48:44 -0700 Subject: [PATCH 69/87] Add Missing Serialzed AuthorizationDeniedException Issue gh-16544 --- ...tion.AuthorizationDeniedException.serialized | Bin 0 -> 10949 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.authorization.AuthorizationDeniedException.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.authorization.AuthorizationDeniedException.serialized index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..5ef935c3680f7c77e75b7a171efa7fa1c24f2564 100644 GIT binary patch literal 10949 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 literal 0 HcmV?d00001 From 3e496c0260863c57ec109a1355cbdde73408ed61 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Feb 2025 03:15:10 +0000 Subject: [PATCH 70/87] Bump io.micrometer:micrometer-observation from 1.14.3 to 1.14.4 Bumps [io.micrometer:micrometer-observation](https://github.com/micrometer-metrics/micrometer) from 1.14.3 to 1.14.4. - [Release notes](https://github.com/micrometer-metrics/micrometer/releases) - [Commits](https://github.com/micrometer-metrics/micrometer/compare/v1.14.3...v1.14.4) --- updated-dependencies: - dependency-name: io.micrometer:micrometer-observation dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f4097bf2c50..19cec04ac35 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -28,7 +28,7 @@ com-squareup-okhttp3-okhttp = { module = "com.squareup.okhttp3:okhttp", version. com-unboundid-unboundid-ldapsdk = "com.unboundid:unboundid-ldapsdk:6.0.11" com-unboundid-unboundid-ldapsdk7 = "com.unboundid:unboundid-ldapsdk:7.0.1" commons-collections = "commons-collections:commons-collections:3.2.2" -io-micrometer-micrometer-observation = "io.micrometer:micrometer-observation:1.14.3" +io-micrometer-micrometer-observation = "io.micrometer:micrometer-observation:1.14.4" io-mockk = "io.mockk:mockk:1.13.16" io-projectreactor-reactor-bom = "io.projectreactor:reactor-bom:2023.0.14" io-rsocket-rsocket-bom = { module = "io.rsocket:rsocket-bom", version.ref = "io-rsocket" } From 8ebd893d016092200643b16969b88dc92dbb9394 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Feb 2025 03:15:37 +0000 Subject: [PATCH 71/87] Bump org.hibernate.orm:hibernate-core from 6.6.6.Final to 6.6.7.Final Bumps [org.hibernate.orm:hibernate-core](https://github.com/hibernate/hibernate-orm) from 6.6.6.Final to 6.6.7.Final. - [Release notes](https://github.com/hibernate/hibernate-orm/releases) - [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.7/changelog.txt) - [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.6...6.6.7) --- updated-dependencies: - dependency-name: org.hibernate.orm:hibernate-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 19cec04ac35..dd3bb922623 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -70,7 +70,7 @@ org-bouncycastle-bcprov-jdk15on = { module = "org.bouncycastle:bcprov-jdk18on", org-eclipse-jetty-jetty-server = { module = "org.eclipse.jetty:jetty-server", version.ref = "org-eclipse-jetty" } org-eclipse-jetty-jetty-servlet = { module = "org.eclipse.jetty:jetty-servlet", version.ref = "org-eclipse-jetty" } org-hamcrest = "org.hamcrest:hamcrest:2.2" -org-hibernate-orm-hibernate-core = "org.hibernate.orm:hibernate-core:6.6.6.Final" +org-hibernate-orm-hibernate-core = "org.hibernate.orm:hibernate-core:6.6.7.Final" org-hsqldb = "org.hsqldb:hsqldb:2.7.4" org-jetbrains-kotlin-kotlin-bom = { module = "org.jetbrains.kotlin:kotlin-bom", version.ref = "org-jetbrains-kotlin" } org-jetbrains-kotlin-kotlin-gradle-plugin = "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.25" From 5a30d984a07471a5a619550e3ad479293a1ff758 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Feb 2025 03:14:17 +0000 Subject: [PATCH 72/87] Bump io.projectreactor:reactor-bom from 2023.0.14 to 2023.0.15 Bumps [io.projectreactor:reactor-bom](https://github.com/reactor/reactor) from 2023.0.14 to 2023.0.15. - [Release notes](https://github.com/reactor/reactor/releases) - [Commits](https://github.com/reactor/reactor/compare/2023.0.14...2023.0.15) --- updated-dependencies: - dependency-name: io.projectreactor:reactor-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index dd3bb922623..c9ab161fd4f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -30,7 +30,7 @@ com-unboundid-unboundid-ldapsdk7 = "com.unboundid:unboundid-ldapsdk:7.0.1" commons-collections = "commons-collections:commons-collections:3.2.2" io-micrometer-micrometer-observation = "io.micrometer:micrometer-observation:1.14.4" io-mockk = "io.mockk:mockk:1.13.16" -io-projectreactor-reactor-bom = "io.projectreactor:reactor-bom:2023.0.14" +io-projectreactor-reactor-bom = "io.projectreactor:reactor-bom:2023.0.15" io-rsocket-rsocket-bom = { module = "io.rsocket:rsocket-bom", version.ref = "io-rsocket" } io-spring-javaformat-spring-javaformat-checkstyle = { module = "io.spring.javaformat:spring-javaformat-checkstyle", version.ref = "io-spring-javaformat" } io-spring-javaformat-spring-javaformat-gradle-plugin = { module = "io.spring.javaformat:spring-javaformat-gradle-plugin", version.ref = "io-spring-javaformat" } From b64d5af9c4ad69ff667e4355ccc0549f78f0361a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Feb 2025 03:16:57 +0000 Subject: [PATCH 73/87] Bump io.projectreactor:reactor-bom from 2023.0.14 to 2023.0.15 Bumps [io.projectreactor:reactor-bom](https://github.com/reactor/reactor) from 2023.0.14 to 2023.0.15. - [Release notes](https://github.com/reactor/reactor/releases) - [Commits](https://github.com/reactor/reactor/compare/2023.0.14...2023.0.15) --- updated-dependencies: - dependency-name: io.projectreactor:reactor-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6fa972dc279..592f2fca769 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -28,7 +28,7 @@ com-unboundid-unboundid-ldapsdk = "com.unboundid:unboundid-ldapsdk:6.0.11" commons-collections = "commons-collections:commons-collections:3.2.2" io-micrometer-micrometer-observation = "io.micrometer:micrometer-observation:1.12.13" io-mockk = "io.mockk:mockk:1.13.16" -io-projectreactor-reactor-bom = "io.projectreactor:reactor-bom:2023.0.14" +io-projectreactor-reactor-bom = "io.projectreactor:reactor-bom:2023.0.15" io-rsocket-rsocket-bom = { module = "io.rsocket:rsocket-bom", version.ref = "io-rsocket" } io-spring-javaformat-spring-javaformat-checkstyle = { module = "io.spring.javaformat:spring-javaformat-checkstyle", version.ref = "io-spring-javaformat" } io-spring-javaformat-spring-javaformat-gradle-plugin = { module = "io.spring.javaformat:spring-javaformat-gradle-plugin", version.ref = "io-spring-javaformat" } From 33d96d574fb106fa500d3a4452858d418b183029 Mon Sep 17 00:00:00 2001 From: Joe Grandja <10884212+jgrandja@users.noreply.github.com> Date: Wed, 12 Feb 2025 05:47:03 -0500 Subject: [PATCH 74/87] Update to oauth2-oidc-sdk 9.43.5 Closes gh-16582 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 592f2fca769..23ffde3afbb 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -21,7 +21,7 @@ com-fasterxml-jackson-jackson-bom = "com.fasterxml.jackson:jackson-bom:2.17.3" com-google-inject-guice = "com.google.inject:guice:3.0" com-netflix-nebula-nebula-project-plugin = "com.netflix.nebula:nebula-project-plugin:8.2.0" com-nimbusds-nimbus-jose-jwt = "com.nimbusds:nimbus-jose-jwt:9.37.3" -com-nimbusds-oauth2-oidc-sdk = "com.nimbusds:oauth2-oidc-sdk:9.43.4" +com-nimbusds-oauth2-oidc-sdk = "com.nimbusds:oauth2-oidc-sdk:9.43.5" com-squareup-okhttp3-mockwebserver = { module = "com.squareup.okhttp3:mockwebserver", version.ref = "com-squareup-okhttp3" } com-squareup-okhttp3-okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "com-squareup-okhttp3" } com-unboundid-unboundid-ldapsdk = "com.unboundid:unboundid-ldapsdk:6.0.11" From 879b44f9a1d478fd06aab3cb3b9373b839aaedbd Mon Sep 17 00:00:00 2001 From: Max Batischev Date: Wed, 12 Feb 2025 15:23:08 +0300 Subject: [PATCH 75/87] Make PublicKeyCredentialRequestOptions Serializable Closes gh-16432 Signed-off-by: Max Batischev --- ...gSecurityCoreVersionSerializableTests.java | 46 ++++++++++++++++++ ...uthn.api.AuthenticatorTransport.serialized | Bin 0 -> 124 bytes ...tensionsClientInput$CredProtect.serialized | Bin 0 -> 507 bytes ...enticationExtensionsClientInput.serialized | Bin 0 -> 733 bytes ...enticationExtensionsClientInput.serialized | Bin 0 -> 230 bytes ...nticationExtensionsClientInputs.serialized | Bin 0 -> 540 bytes ...i.PublicKeyCredentialDescriptor.serialized | Bin 0 -> 688 bytes ...blicKeyCredentialRequestOptions.serialized | Bin 0 -> 1833 bytes ...thn.api.PublicKeyCredentialType.serialized | Bin 0 -> 132 bytes ...api.UserVerificationRequirement.serialized | Bin 0 -> 134 bytes .../AuthenticationExtensionsClientInput.java | 6 ++- .../AuthenticationExtensionsClientInputs.java | 5 +- .../webauthn/api/AuthenticatorTransport.java | 10 +++- ...ctAuthenticationExtensionsClientInput.java | 13 ++++- ...leAuthenticationExtensionsClientInput.java | 7 ++- ...eAuthenticationExtensionsClientInputs.java | 6 ++- .../api/PublicKeyCredentialDescriptor.java | 9 +++- .../PublicKeyCredentialRequestOptions.java | 9 +++- .../webauthn/api/PublicKeyCredentialType.java | 10 +++- .../api/UserVerificationRequirement.java | 10 +++- 20 files changed, 113 insertions(+), 18 deletions(-) create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.AuthenticatorTransport.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.CredProtectAuthenticationExtensionsClientInput$CredProtect.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.CredProtectAuthenticationExtensionsClientInput.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.ImmutableAuthenticationExtensionsClientInput.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.ImmutableAuthenticationExtensionsClientInputs.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.PublicKeyCredentialDescriptor.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.PublicKeyCredentialRequestOptions.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.PublicKeyCredentialType.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.UserVerificationRequirement.serialized diff --git a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java index afc044effa4..cc53b8e1593 100644 --- a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java +++ b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java @@ -211,12 +211,23 @@ import org.springframework.security.web.savedrequest.SimpleSavedRequest; import org.springframework.security.web.server.firewall.ServerExchangeRejectedException; import org.springframework.security.web.session.HttpSessionCreatedEvent; +import org.springframework.security.web.webauthn.api.AuthenticationExtensionsClientInputs; +import org.springframework.security.web.webauthn.api.AuthenticatorTransport; import org.springframework.security.web.webauthn.api.Bytes; +import org.springframework.security.web.webauthn.api.CredProtectAuthenticationExtensionsClientInput; +import org.springframework.security.web.webauthn.api.ImmutableAuthenticationExtensionsClientInput; +import org.springframework.security.web.webauthn.api.ImmutableAuthenticationExtensionsClientInputs; import org.springframework.security.web.webauthn.api.ImmutablePublicKeyCredentialUserEntity; +import org.springframework.security.web.webauthn.api.PublicKeyCredentialDescriptor; +import org.springframework.security.web.webauthn.api.PublicKeyCredentialRequestOptions; +import org.springframework.security.web.webauthn.api.PublicKeyCredentialType; import org.springframework.security.web.webauthn.api.PublicKeyCredentialUserEntity; import org.springframework.security.web.webauthn.api.TestBytes; +import org.springframework.security.web.webauthn.api.TestPublicKeyCredentialRequestOptions; import org.springframework.security.web.webauthn.api.TestPublicKeyCredentialUserEntity; +import org.springframework.security.web.webauthn.api.UserVerificationRequirement; import org.springframework.security.web.webauthn.authentication.WebAuthnAuthentication; +import org.springframework.util.ReflectionUtils; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; @@ -584,6 +595,41 @@ class SpringSecurityCoreVersionSerializableTests { webAuthnAuthentication.setDetails(details); return webAuthnAuthentication; }); + + // webauthn + CredProtectAuthenticationExtensionsClientInput.CredProtect credProtect = new CredProtectAuthenticationExtensionsClientInput.CredProtect( + CredProtectAuthenticationExtensionsClientInput.CredProtect.ProtectionPolicy.USER_VERIFICATION_OPTIONAL, + true); + Bytes id = TestBytes.get(); + AuthenticationExtensionsClientInputs inputs = new ImmutableAuthenticationExtensionsClientInputs( + ImmutableAuthenticationExtensionsClientInput.credProps); + // @formatter:off + PublicKeyCredentialDescriptor descriptor = PublicKeyCredentialDescriptor.builder() + .id(id) + .type(PublicKeyCredentialType.PUBLIC_KEY) + .transports(Set.of(AuthenticatorTransport.USB)) + .build(); + // @formatter:on + generatorByClassName.put(AuthenticatorTransport.class, (a) -> AuthenticatorTransport.USB); + generatorByClassName.put(PublicKeyCredentialType.class, (k) -> PublicKeyCredentialType.PUBLIC_KEY); + generatorByClassName.put(UserVerificationRequirement.class, (r) -> UserVerificationRequirement.REQUIRED); + generatorByClassName.put(CredProtectAuthenticationExtensionsClientInput.CredProtect.class, (c) -> credProtect); + generatorByClassName.put(CredProtectAuthenticationExtensionsClientInput.class, + (c) -> new CredProtectAuthenticationExtensionsClientInput(credProtect)); + generatorByClassName.put(ImmutableAuthenticationExtensionsClientInputs.class, (i) -> inputs); + Field credPropsField = ReflectionUtils.findField(ImmutableAuthenticationExtensionsClientInput.class, + "credProps"); + generatorByClassName.put(credPropsField.getType(), + (i) -> ImmutableAuthenticationExtensionsClientInput.credProps); + generatorByClassName.put(Bytes.class, (b) -> id); + generatorByClassName.put(PublicKeyCredentialDescriptor.class, (d) -> descriptor); + // @formatter:off + generatorByClassName.put(PublicKeyCredentialRequestOptions.class, (o) -> TestPublicKeyCredentialRequestOptions.create() + .extensions(inputs) + .allowCredentials(List.of(descriptor)) + .build() + ); + // @formatter:on } @ParameterizedTest diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.AuthenticatorTransport.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.AuthenticatorTransport.serialized new file mode 100644 index 0000000000000000000000000000000000000000..183124aa4e607bd6bfea05073e6e1951ac2c9993 GIT binary patch literal 124 zcmZ4UmVvdnh`}YlC|$3(peQphJ*_A)H?=&!C|j>MHMz7Xv!qh5JT(b~6H7}n^7Il5 zGW8sRtkk@c%;dz9{GyPe#Ju8y{GyUgoIFYI*0@VCF);ctu$Cp}l%|$22>E0smL=-v WB<7{-2bX{>u&yX5VPGyTP67aZ3oTy& literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.CredProtectAuthenticationExtensionsClientInput$CredProtect.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.CredProtectAuthenticationExtensionsClientInput$CredProtect.serialized new file mode 100644 index 0000000000000000000000000000000000000000..0222d302d6c70ca486e5530b9f0697b4089e9867 GIT binary patch literal 507 zcmZ4UmVvdnh#@1tC|$3(peQphJ*_A)H?=&!C|j>MHMz7Xv!qh5JT(b~6H7}n^7Il5 zGWDE`Qd0to@=H>aOB{iMsd*)t$%!SI`FXAtC8>GEKt{21P9{*;Gq0euLng-aN!eSj|3M{}`0 z%*FaZ*MczE#ri-O>mxaVL>H@|yUDtufU&NKp^{!fhT#APC=g;`s3>CK%StRu)XPcC oOV@MFE6qigEGS`+3JrD*iVt%Q@^tfbb`0_K_lx%r08x%U0N0thNdN!< literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.CredProtectAuthenticationExtensionsClientInput.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.CredProtectAuthenticationExtensionsClientInput.serialized new file mode 100644 index 0000000000000000000000000000000000000000..0b0b44e588ba52ef7628208ebbdefa770e256110 GIT binary patch literal 733 zcmchT&q~8U5Qis~URA`CH=!3jY#zW<2oVCI4fPKwVp-R1x;5PmlZj0b#EW;I!jrG2 z_z3Pw)lg3!?830aZx_Cq@8uP`CBlWljFkl{osE&tH@p6Cf?ERqwopacgdTdZgH;%K!^My96C^fkf zO#<8E$L4oTaJMo+z2%v#G4CFsS(UP11Hj^J0n`ZVQ+~@?&UMBjUCr8$1;NhAQ8XN# TM#K0p4uj)(&>sy_cLm7@6-y8r literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.ImmutableAuthenticationExtensionsClientInput.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.ImmutableAuthenticationExtensionsClientInput.serialized new file mode 100644 index 0000000000000000000000000000000000000000..604e609fcaa5da2770f4091a3288b8d32d256922 GIT binary patch literal 230 zcmZ4UmVvdnh#@M!C|$3(peQphJ*_A)H?=&!C|j>MHMz7Xv!qh5JT(b~6H7}n^7Il5 zGW9%jb4yDSlX6lWfkLTyC7H>IC7Jnot`#MzdBs3Rv2#u)P}noCptR)qgX^vTSRO<$ zF);ZsaHqnQc&3yv2>E0smL=-vB<7{-2bX{>xAtLR%>?N}mGn=_N=+`Yt|%yB;7l$` yO$jKKT88K7{=c_Y(X6Sw~2#;bNT_!rHVu0KtTuTQ6as?GxeGa$(#1Nxd?s;2M0k1 zKZCPN7eQ2T=;mZUfP$EuD7tw=NO%&S_j!J~euauw5M?SMS}HD*14Vmmkf|f0S!@)? zAsMi?Th!p8AXIYF==BWJcFO8jVgh+gk!NBvM<%pA=#7+Hxgn%M9kibJ-_I`}eego4 z@M1=m+`~N$JBVw2S0=v_6@et zL0I@zdk5W@1tC-lu759om>^8YigmVCCbf+{UqE))$aO}iN`XS6 zQ79!&BO#$siB6*zN)3%hD402sh)`VdGR5S5|Ns8?N>32+1WdRhr+ZvjPHtY%WtMlv zlJ2prFDwl7JTp~M9~T^*a!a4|P20*&uplYe9COg3_9*kR!s6(PwHn$!-M6u$LD&Gz znnUO_B%b`jlW#ncXjNrAk$92_ka=+fq9~~2aaW*+&|oamRZ4ucY?5XuzpF6d3?Wq^ z{SWgQ35plE45GKPAj(c}*UyH!uMda@p;?HS$~=NLn<#K!sJHae^jck$dC&j~8~{27 zI*$7vV{gUg)MoE4&b)T+-E6z>UD4Cf{^jHO)xGo)Q^V?NSUu_5cAAN)t)sKS*27pB zLgNrdnk%!ke3c}IWXEV_&PU`j)#kEPt}OGN^GR);`CLl1$WaW4tWw*T0XKdnZ&N2n s(x`4kW`z*;J+mN%$0`&4Cw^M|7`|w`bAKqWKoRPdQk0kPt!Ie^pQ1YZK>z>% literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.PublicKeyCredentialRequestOptions.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.PublicKeyCredentialRequestOptions.serialized new file mode 100644 index 0000000000000000000000000000000000000000..40415ad5dfe779d59650f4b9421c6e5c25e34b24 GIT binary patch literal 1833 zcmbtVT}TvB6uvXAziGMsP-xLoJ@imB4^dePl|R_#f|A=0yBOSEuj|z8%=O+g?QD<~ z7(@>hRP-X@gOHHD2ub;1Jw)`75lU8&v~T&6FTF_7&%I-sg+)UHGsDc>d(L;h^PO)7 zKcIZhP_xZa8mG*#QXLGZNycWUG)|HZGa##FNJ5_2flf=q)X-X-glQz3NVblVc4C2n z&BLV2Asm`17`DYHpVq`?ul3ESs33yMv1!_wpG!HQ^2kYi8tV=irXDdkR7X&8vQw-h zR*C@H84-B&-|*=3cyxh9o*o`u;L&TdK)8reLR=sgmk0nweFixo%9FJuu`HosAyS=b zh}U6@Iv{fd7!9`rS~*vNiLI303X(YStq_bfu^j-kdhWA)*6SVSg%k_Q9ZuL$!iorp710yDA?>w5#D%wXU|m?9b}!xpDD1JRiki@M)RWb*@% zrK0bRKDk&zhfxt|j)xuos`4~6etvl0)+c?sij+9YPe@q-QscEQb(p*leq1|SP!!Fn z2zeZa_Jr>4nht*IUe|bO$90I!Zn`;k#s0jxv8EmW&KqDysG&UU~GX-14;jbZJPvJV{GdO--Vib`qPNHV3i2%a literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.PublicKeyCredentialType.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.PublicKeyCredentialType.serialized new file mode 100644 index 0000000000000000000000000000000000000000..efc9d8e3ee6ffdf41e7ef918aa0b43897ef12e89 GIT binary patch literal 132 zcmZ4UmVvdnh`}|#C|$3(peQphJ*_A)H?=&!C|j>MHMz7Xv!qh5JT(b~6H7}n^7Il5 zGW7yVlX5bXy;Ccli&9fk^GY%kb3!T$QWNX`JM5CZo6p3+=)=HTmY7qTTEZaYla*MO csGpOVm#!aN0MHMz7Xv!qh5JT(b~6H7}n^7Il5 zGW9}>Q;Whclient extension * input entry in the {@link AuthenticationExtensionsClientInputs}. @@ -25,7 +27,7 @@ * @since 6.4 * @see ImmutableAuthenticationExtensionsClientInput */ -public interface AuthenticationExtensionsClientInput { +public interface AuthenticationExtensionsClientInput extends Serializable { /** * Gets the extension diff --git a/web/src/main/java/org/springframework/security/web/webauthn/api/AuthenticationExtensionsClientInputs.java b/web/src/main/java/org/springframework/security/web/webauthn/api/AuthenticationExtensionsClientInputs.java index 44a26a41c12..3befaa601fc 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/api/AuthenticationExtensionsClientInputs.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/api/AuthenticationExtensionsClientInputs.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2024 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,7 @@ package org.springframework.security.web.webauthn.api; +import java.io.Serializable; import java.util.List; /** @@ -31,7 +32,7 @@ * @since 6.4 * @see PublicKeyCredentialCreationOptions#getExtensions() */ -public interface AuthenticationExtensionsClientInputs { +public interface AuthenticationExtensionsClientInputs extends Serializable { /** * Gets all of the {@link AuthenticationExtensionsClientInput}. diff --git a/web/src/main/java/org/springframework/security/web/webauthn/api/AuthenticatorTransport.java b/web/src/main/java/org/springframework/security/web/webauthn/api/AuthenticatorTransport.java index 33e9d2123cb..0974d295697 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/api/AuthenticatorTransport.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/api/AuthenticatorTransport.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2024 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,9 @@ package org.springframework.security.web.webauthn.api; +import java.io.Serial; +import java.io.Serializable; + /** * AuthenticatorTransport @@ -25,7 +28,10 @@ * @author Rob Winch * @since 6.4 */ -public final class AuthenticatorTransport { +public final class AuthenticatorTransport implements Serializable { + + @Serial + private static final long serialVersionUID = -5617945441117386982L; /** * usbc diff --git a/web/src/main/java/org/springframework/security/web/webauthn/api/CredProtectAuthenticationExtensionsClientInput.java b/web/src/main/java/org/springframework/security/web/webauthn/api/CredProtectAuthenticationExtensionsClientInput.java index 22372717595..e28da6d7897 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/api/CredProtectAuthenticationExtensionsClientInput.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/api/CredProtectAuthenticationExtensionsClientInput.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2024 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,9 @@ package org.springframework.security.web.webauthn.api; +import java.io.Serial; +import java.io.Serializable; + /** * Implements @@ -27,6 +30,9 @@ public class CredProtectAuthenticationExtensionsClientInput implements AuthenticationExtensionsClientInput { + @Serial + private static final long serialVersionUID = -6418175591005843455L; + private final CredProtect input; public CredProtectAuthenticationExtensionsClientInput(CredProtect input) { @@ -43,7 +49,10 @@ public CredProtect getInput() { return this.input; } - public static class CredProtect { + public static class CredProtect implements Serializable { + + @Serial + private static final long serialVersionUID = 109597301115842688L; private final ProtectionPolicy credProtectionPolicy; diff --git a/web/src/main/java/org/springframework/security/web/webauthn/api/ImmutableAuthenticationExtensionsClientInput.java b/web/src/main/java/org/springframework/security/web/webauthn/api/ImmutableAuthenticationExtensionsClientInput.java index eb656c3cdfb..ad479b4a017 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/api/ImmutableAuthenticationExtensionsClientInput.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/api/ImmutableAuthenticationExtensionsClientInput.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2024 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,8 @@ package org.springframework.security.web.webauthn.api; +import java.io.Serial; + /** * An immutable {@link AuthenticationExtensionsClientInput}. * @@ -26,6 +28,9 @@ */ public class ImmutableAuthenticationExtensionsClientInput implements AuthenticationExtensionsClientInput { + @Serial + private static final long serialVersionUID = -1738152485672656808L; + /** * https://www.w3.org/TR/webauthn-3/#sctn-authenticator-credential-properties-extension */ diff --git a/web/src/main/java/org/springframework/security/web/webauthn/api/ImmutableAuthenticationExtensionsClientInputs.java b/web/src/main/java/org/springframework/security/web/webauthn/api/ImmutableAuthenticationExtensionsClientInputs.java index cef29f378a5..f9c43608b18 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/api/ImmutableAuthenticationExtensionsClientInputs.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/api/ImmutableAuthenticationExtensionsClientInputs.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2024 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,7 @@ package org.springframework.security.web.webauthn.api; +import java.io.Serial; import java.util.Arrays; import java.util.List; @@ -27,6 +28,9 @@ */ public class ImmutableAuthenticationExtensionsClientInputs implements AuthenticationExtensionsClientInputs { + @Serial + private static final long serialVersionUID = 4277817521578485720L; + private final List inputs; public ImmutableAuthenticationExtensionsClientInputs(List inputs) { diff --git a/web/src/main/java/org/springframework/security/web/webauthn/api/PublicKeyCredentialDescriptor.java b/web/src/main/java/org/springframework/security/web/webauthn/api/PublicKeyCredentialDescriptor.java index ad454814b0f..6fbe5250ac1 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/api/PublicKeyCredentialDescriptor.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/api/PublicKeyCredentialDescriptor.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2024 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,8 @@ package org.springframework.security.web.webauthn.api; +import java.io.Serial; +import java.io.Serializable; import java.util.Set; /** @@ -29,7 +31,10 @@ * @author Rob Winch * @since 6.4 */ -public final class PublicKeyCredentialDescriptor { +public final class PublicKeyCredentialDescriptor implements Serializable { + + @Serial + private static final long serialVersionUID = 8793385059692676240L; private final PublicKeyCredentialType type; diff --git a/web/src/main/java/org/springframework/security/web/webauthn/api/PublicKeyCredentialRequestOptions.java b/web/src/main/java/org/springframework/security/web/webauthn/api/PublicKeyCredentialRequestOptions.java index b0cf592009c..9cadc1cb29f 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/api/PublicKeyCredentialRequestOptions.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/api/PublicKeyCredentialRequestOptions.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2024 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,8 @@ package org.springframework.security.web.webauthn.api; +import java.io.Serial; +import java.io.Serializable; import java.time.Duration; import java.util.ArrayList; import java.util.Collections; @@ -32,7 +34,10 @@ * @author Rob Winch * @since 6.4 */ -public final class PublicKeyCredentialRequestOptions { +public final class PublicKeyCredentialRequestOptions implements Serializable { + + @Serial + private static final long serialVersionUID = -2970057592835694354L; private final Bytes challenge; diff --git a/web/src/main/java/org/springframework/security/web/webauthn/api/PublicKeyCredentialType.java b/web/src/main/java/org/springframework/security/web/webauthn/api/PublicKeyCredentialType.java index 57f1c6ec463..99087a5d291 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/api/PublicKeyCredentialType.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/api/PublicKeyCredentialType.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2024 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,9 @@ package org.springframework.security.web.webauthn.api; +import java.io.Serial; +import java.io.Serializable; + /** * The PublicKeyCredentialType @@ -24,7 +27,10 @@ * @author Rob Winch * @since 6.4 */ -public final class PublicKeyCredentialType { +public final class PublicKeyCredentialType implements Serializable { + + @Serial + private static final long serialVersionUID = 7025333122210061679L; /** * The only credential type that currently exists. diff --git a/web/src/main/java/org/springframework/security/web/webauthn/api/UserVerificationRequirement.java b/web/src/main/java/org/springframework/security/web/webauthn/api/UserVerificationRequirement.java index adc915015b5..dcbabead87b 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/api/UserVerificationRequirement.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/api/UserVerificationRequirement.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2024 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,9 @@ package org.springframework.security.web.webauthn.api; +import java.io.Serial; +import java.io.Serializable; + /** * UserVerificationRequirement @@ -24,7 +27,10 @@ * @author Rob Winch * @since 6.4 */ -public final class UserVerificationRequirement { +public final class UserVerificationRequirement implements Serializable { + + @Serial + private static final long serialVersionUID = -2801001231345540040L; /** * The Date: Fri, 14 Feb 2025 04:07:16 +0000 Subject: [PATCH 76/87] Bump com.nimbusds:oauth2-oidc-sdk from 9.43.5 to 9.43.6 Bumps [com.nimbusds:oauth2-oidc-sdk](https://bitbucket.org/connect2id/oauth-2.0-sdk-with-openid-connect-extensions) from 9.43.5 to 9.43.6. - [Changelog](https://bitbucket.org/connect2id/oauth-2.0-sdk-with-openid-connect-extensions/src/master/CHANGELOG.txt) - [Commits](https://bitbucket.org/connect2id/oauth-2.0-sdk-with-openid-connect-extensions/branches/compare/9.43.6..9.43.5) --- updated-dependencies: - dependency-name: com.nimbusds:oauth2-oidc-sdk dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 23ffde3afbb..dac5187a225 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -21,7 +21,7 @@ com-fasterxml-jackson-jackson-bom = "com.fasterxml.jackson:jackson-bom:2.17.3" com-google-inject-guice = "com.google.inject:guice:3.0" com-netflix-nebula-nebula-project-plugin = "com.netflix.nebula:nebula-project-plugin:8.2.0" com-nimbusds-nimbus-jose-jwt = "com.nimbusds:nimbus-jose-jwt:9.37.3" -com-nimbusds-oauth2-oidc-sdk = "com.nimbusds:oauth2-oidc-sdk:9.43.5" +com-nimbusds-oauth2-oidc-sdk = "com.nimbusds:oauth2-oidc-sdk:9.43.6" com-squareup-okhttp3-mockwebserver = { module = "com.squareup.okhttp3:mockwebserver", version.ref = "com-squareup-okhttp3" } com-squareup-okhttp3-okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "com-squareup-okhttp3" } com-unboundid-unboundid-ldapsdk = "com.unboundid:unboundid-ldapsdk:6.0.11" From acf19c1f1f4b64edf2ac68ba66bc0c4a138c7f52 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 14 Feb 2025 04:07:24 +0000 Subject: [PATCH 77/87] Bump org.springframework.ldap:spring-ldap-core from 3.2.10 to 3.2.11 Bumps [org.springframework.ldap:spring-ldap-core](https://github.com/spring-projects/spring-ldap) from 3.2.10 to 3.2.11. - [Release notes](https://github.com/spring-projects/spring-ldap/releases) - [Changelog](https://github.com/spring-projects/spring-ldap/blob/main/changelog.txt) - [Commits](https://github.com/spring-projects/spring-ldap/compare/3.2.10...3.2.11) --- updated-dependencies: - dependency-name: org.springframework.ldap:spring-ldap-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index dac5187a225..9e110d1870f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -85,7 +85,7 @@ org-skyscreamer-jsonassert = "org.skyscreamer:jsonassert:1.5.3" org-slf4j-log4j-over-slf4j = "org.slf4j:log4j-over-slf4j:1.7.36" org-slf4j-slf4j-api = "org.slf4j:slf4j-api:2.0.16" org-springframework-data-spring-data-bom = "org.springframework.data:spring-data-bom:2024.0.8" -org-springframework-ldap-spring-ldap-core = "org.springframework.ldap:spring-ldap-core:3.2.10" +org-springframework-ldap-spring-ldap-core = "org.springframework.ldap:spring-ldap-core:3.2.11" org-springframework-spring-framework-bom = { module = "org.springframework:spring-framework-bom", version.ref = "org-springframework" } org-synchronoss-cloud-nio-multipart-parser = "org.synchronoss.cloud:nio-multipart-parser:1.1.0" From 8e752fc70ee73ddbe246e9cb727ac9e29c9ceb79 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 14 Feb 2025 04:09:32 +0000 Subject: [PATCH 78/87] Bump org.springframework.ldap:spring-ldap-core from 3.2.10 to 3.2.11 Bumps [org.springframework.ldap:spring-ldap-core](https://github.com/spring-projects/spring-ldap) from 3.2.10 to 3.2.11. - [Release notes](https://github.com/spring-projects/spring-ldap/releases) - [Changelog](https://github.com/spring-projects/spring-ldap/blob/main/changelog.txt) - [Commits](https://github.com/spring-projects/spring-ldap/compare/3.2.10...3.2.11) --- updated-dependencies: - dependency-name: org.springframework.ldap:spring-ldap-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ca9f89b79f5..ce2531263c1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -89,7 +89,7 @@ org-skyscreamer-jsonassert = "org.skyscreamer:jsonassert:1.5.3" org-slf4j-log4j-over-slf4j = "org.slf4j:log4j-over-slf4j:1.7.36" org-slf4j-slf4j-api = "org.slf4j:slf4j-api:2.0.16" org-springframework-data-spring-data-bom = "org.springframework.data:spring-data-bom:2024.1.2" -org-springframework-ldap-spring-ldap-core = "org.springframework.ldap:spring-ldap-core:3.2.10" +org-springframework-ldap-spring-ldap-core = "org.springframework.ldap:spring-ldap-core:3.2.11" org-springframework-spring-framework-bom = { module = "org.springframework:spring-framework-bom", version.ref = "org-springframework" } org-synchronoss-cloud-nio-multipart-parser = "org.synchronoss.cloud:nio-multipart-parser:1.1.0" From 4c06d98df1c4069fc6bdc9fcd4ff9fe15fd55e44 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 14 Feb 2025 04:09:37 +0000 Subject: [PATCH 79/87] Bump com.nimbusds:oauth2-oidc-sdk from 9.43.5 to 9.43.6 Bumps [com.nimbusds:oauth2-oidc-sdk](https://bitbucket.org/connect2id/oauth-2.0-sdk-with-openid-connect-extensions) from 9.43.5 to 9.43.6. - [Changelog](https://bitbucket.org/connect2id/oauth-2.0-sdk-with-openid-connect-extensions/src/master/CHANGELOG.txt) - [Commits](https://bitbucket.org/connect2id/oauth-2.0-sdk-with-openid-connect-extensions/branches/compare/9.43.6..9.43.5) --- updated-dependencies: - dependency-name: com.nimbusds:oauth2-oidc-sdk dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ce2531263c1..96a523d88e6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -22,7 +22,7 @@ com-fasterxml-jackson-jackson-bom = "com.fasterxml.jackson:jackson-bom:2.18.2" com-google-inject-guice = "com.google.inject:guice:3.0" com-netflix-nebula-nebula-project-plugin = "com.netflix.nebula:nebula-project-plugin:8.2.0" com-nimbusds-nimbus-jose-jwt = "com.nimbusds:nimbus-jose-jwt:9.37.3" -com-nimbusds-oauth2-oidc-sdk = "com.nimbusds:oauth2-oidc-sdk:9.43.5" +com-nimbusds-oauth2-oidc-sdk = "com.nimbusds:oauth2-oidc-sdk:9.43.6" com-squareup-okhttp3-mockwebserver = { module = "com.squareup.okhttp3:mockwebserver", version.ref = "com-squareup-okhttp3" } com-squareup-okhttp3-okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "com-squareup-okhttp3" } com-unboundid-unboundid-ldapsdk = "com.unboundid:unboundid-ldapsdk:6.0.11" From c3d45ae529bf8eec2a6c56b78c6bc39ba2a1e0db Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 14 Feb 2025 04:17:03 +0000 Subject: [PATCH 80/87] Bump org.springframework:spring-framework-bom from 6.1.16 to 6.1.17 Bumps [org.springframework:spring-framework-bom](https://github.com/spring-projects/spring-framework) from 6.1.16 to 6.1.17. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.16...v6.1.17) --- updated-dependencies: - dependency-name: org.springframework:spring-framework-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9e110d1870f..bda5556e0bc 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,7 +13,7 @@ org-jetbrains-kotlin = "1.9.25" org-jetbrains-kotlinx = "1.8.1" org-mockito = "5.11.0" org-opensaml = "4.3.2" -org-springframework = "6.1.16" +org-springframework = "6.1.17" [libraries] ch-qos-logback-logback-classic = "ch.qos.logback:logback-classic:1.5.16" From 9e1a573531e2833c2b150924d28c15a5d22d7a09 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 14 Feb 2025 04:22:36 +0000 Subject: [PATCH 81/87] Bump org.springframework:spring-framework-bom from 6.2.2 to 6.2.3 Bumps [org.springframework:spring-framework-bom](https://github.com/spring-projects/spring-framework) from 6.2.2 to 6.2.3. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.2...v6.2.3) --- updated-dependencies: - dependency-name: org.springframework:spring-framework-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 96a523d88e6..b97921a4541 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,7 +14,7 @@ org-jetbrains-kotlinx = "1.9.0" org-mockito = "5.14.2" org-opensaml = "4.3.2" org-opensaml5 = "5.1.2" -org-springframework = "6.2.2" +org-springframework = "6.2.3" [libraries] ch-qos-logback-logback-classic = "ch.qos.logback:logback-classic:1.5.16" From b5a4218a0bfd91220a4cf38cdefa93ee1f4f5c26 Mon Sep 17 00:00:00 2001 From: Max Batischev Date: Fri, 14 Feb 2025 17:10:00 +0300 Subject: [PATCH 82/87] Make WebAuthnAuthenticationRequestToken Serializable Closes gh-16481 Signed-off-by: Max Batischev --- ...gSecurityCoreVersionSerializableTests.java | 29 ++++++++++++++ ....AuthenticatorAssertionResponse.serialized | Bin 0 -> 782 bytes ....api.CredentialPropertiesOutput.serialized | Bin 0 -> 306 bytes ...ticationExtensionsClientOutputs.serialized | Bin 0 -> 619 bytes ...ebauthn.api.PublicKeyCredential.serialized | Bin 0 -> 2078 bytes ...AuthnAuthenticationRequestToken.serialized | Bin 0 -> 3891 bytes ...lyingPartyAuthenticationRequest.serialized | Bin 0 -> 3196 bytes .../AuthenticationExtensionsClientOutput.java | 6 ++- ...AuthenticationExtensionsClientOutputs.java | 5 ++- .../api/AuthenticatorAssertionResponse.java | 7 +++- .../webauthn/api/AuthenticatorResponse.java | 6 ++- .../api/CredentialPropertiesOutput.java | 13 +++++- ...AuthenticationExtensionsClientOutputs.java | 6 ++- .../web/webauthn/api/PublicKeyCredential.java | 12 ++++-- .../WebAuthnAuthenticationRequestToken.java | 7 +++- .../RelyingPartyAuthenticationRequest.java | 10 ++++- .../TestAuthenticationAssertionResponses.java | 37 ++++++++++++++++++ .../webauthn/api/TestPublicKeyCredential.java | 13 +++++- 18 files changed, 134 insertions(+), 17 deletions(-) create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.AuthenticatorAssertionResponse.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.CredentialPropertiesOutput.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.ImmutableAuthenticationExtensionsClientOutputs.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.PublicKeyCredential.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.authentication.WebAuthnAuthenticationRequestToken.serialized create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.management.RelyingPartyAuthenticationRequest.serialized create mode 100644 web/src/test/java/org/springframework/security/web/webauthn/api/TestAuthenticationAssertionResponses.java diff --git a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java index cc53b8e1593..7f4d78f41bb 100644 --- a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java +++ b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java @@ -212,21 +212,30 @@ import org.springframework.security.web.server.firewall.ServerExchangeRejectedException; import org.springframework.security.web.session.HttpSessionCreatedEvent; import org.springframework.security.web.webauthn.api.AuthenticationExtensionsClientInputs; +import org.springframework.security.web.webauthn.api.AuthenticationExtensionsClientOutputs; +import org.springframework.security.web.webauthn.api.AuthenticatorAssertionResponse; import org.springframework.security.web.webauthn.api.AuthenticatorTransport; import org.springframework.security.web.webauthn.api.Bytes; import org.springframework.security.web.webauthn.api.CredProtectAuthenticationExtensionsClientInput; +import org.springframework.security.web.webauthn.api.CredentialPropertiesOutput; import org.springframework.security.web.webauthn.api.ImmutableAuthenticationExtensionsClientInput; import org.springframework.security.web.webauthn.api.ImmutableAuthenticationExtensionsClientInputs; +import org.springframework.security.web.webauthn.api.ImmutableAuthenticationExtensionsClientOutputs; import org.springframework.security.web.webauthn.api.ImmutablePublicKeyCredentialUserEntity; +import org.springframework.security.web.webauthn.api.PublicKeyCredential; import org.springframework.security.web.webauthn.api.PublicKeyCredentialDescriptor; import org.springframework.security.web.webauthn.api.PublicKeyCredentialRequestOptions; import org.springframework.security.web.webauthn.api.PublicKeyCredentialType; import org.springframework.security.web.webauthn.api.PublicKeyCredentialUserEntity; +import org.springframework.security.web.webauthn.api.TestAuthenticationAssertionResponses; import org.springframework.security.web.webauthn.api.TestBytes; +import org.springframework.security.web.webauthn.api.TestPublicKeyCredential; import org.springframework.security.web.webauthn.api.TestPublicKeyCredentialRequestOptions; import org.springframework.security.web.webauthn.api.TestPublicKeyCredentialUserEntity; import org.springframework.security.web.webauthn.api.UserVerificationRequirement; import org.springframework.security.web.webauthn.authentication.WebAuthnAuthentication; +import org.springframework.security.web.webauthn.authentication.WebAuthnAuthenticationRequestToken; +import org.springframework.security.web.webauthn.management.RelyingPartyAuthenticationRequest; import org.springframework.util.ReflectionUtils; import static org.assertj.core.api.Assertions.assertThat; @@ -629,6 +638,26 @@ class SpringSecurityCoreVersionSerializableTests { .allowCredentials(List.of(descriptor)) .build() ); + + CredentialPropertiesOutput credentialOutput = new CredentialPropertiesOutput(false); + AuthenticationExtensionsClientOutputs outputs = new ImmutableAuthenticationExtensionsClientOutputs(credentialOutput); + AuthenticatorAssertionResponse response = TestAuthenticationAssertionResponses.createAuthenticatorAssertionResponse() + .build(); + PublicKeyCredential credential = TestPublicKeyCredential.createPublicKeyCredential( + response, outputs) + .build(); + RelyingPartyAuthenticationRequest authRequest = new RelyingPartyAuthenticationRequest( + TestPublicKeyCredentialRequestOptions.create().build(), + credential + ); + WebAuthnAuthenticationRequestToken requestToken = new WebAuthnAuthenticationRequestToken(authRequest); + requestToken.setDetails(details); + generatorByClassName.put(CredentialPropertiesOutput.class, (o) -> credentialOutput); + generatorByClassName.put(ImmutableAuthenticationExtensionsClientOutputs.class, (o) -> outputs); + generatorByClassName.put(AuthenticatorAssertionResponse.class, (r) -> response); + generatorByClassName.put(RelyingPartyAuthenticationRequest.class, (r) -> authRequest); + generatorByClassName.put(PublicKeyCredential.class, (r) -> credential); + generatorByClassName.put(WebAuthnAuthenticationRequestToken.class, (r) -> requestToken); // @formatter:on } diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.AuthenticatorAssertionResponse.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.AuthenticatorAssertionResponse.serialized new file mode 100644 index 0000000000000000000000000000000000000000..64a8173e8e34a1ed9ebdb6e8e3783934a15943fb GIT binary patch literal 782 zcmZ4UmVvdnh`}enC|$3(peQphJ*_A)H?=&!C|j>MHMz7Xv!qh5JT(b~6H7}n^7Il5 zGW8sRtkk@c%;dz9{36HV;?$y&%>2Bd)Z&8tyy8@rrk>=qc{ivN*GK**6E{Jrw_AEA7~W_gRRpCTBq++2{ghQWEQf$E{P?Hg$#8Jj6MvU z#hK}Oi6x~)sZar~QlOhW67y1WAR-k-49*mI5$3alCo(rQy(&4+1hSMbIVTes2q0&8 z1^fGfZLTN)2BtA-Hi3P2sd1aV#<2zZK$D{xSd%~=E@5DbcB&{SEdtSNK8ycg;|O`c z#K2Hdz`(%JR;^T0S&*t^r34Epz4X))B^{;YjKrLr)Vy?%RE9xWdbxXGR=#tUW0gy2 zac)&WLAI_}n5S1zPS+{dho6+%^F`sue%T7<01?po!)8ua8%A~*^f98Ywybq@gB>l*$5 literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.CredentialPropertiesOutput.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.CredentialPropertiesOutput.serialized new file mode 100644 index 0000000000000000000000000000000000000000..78ddecc04253cac26a4cf70c69596d048012bfc7 GIT binary patch literal 306 zcmZ4UmVvdnh`}SjC|$3(peQphJ*_A)H?=&!C|j>MHMz7Xv!qh5JT(b~6H7}n^7Il5 zGWDE`Qd3g%N-`630*dkrQj1D5Q;YpeOA1O$E>CpN|LC__mWhGUhk-30ELOr0pQyUgOUMHMz7Xv!qh5JT(b~6H7}n^7Il5 zGW9%jb4yDSlX6lWfkLTyC7H>IC7Jnot`#MzdBs3Rv2#u)P}sk;q@c8eqx#L%V ziZd}V`Y^EPLj+401bng*%M$fVOEPoxeKLzntSbtDE|CHW>VX9H9E*w)D~naY6iC6% zB{uuccCcLnniI{ym{`If91SrdCowNw-#;lUH5p_`X%Rzcv=3<>BE}!qDnIl4_s#s> zz{J2%QNX~!zzB4%2Wj>=7p10v!YeT+peVl}wWuUBwHOjgmnXXCfArfd3l1bUNFbFk zM1lOFj}|fdu!zwIMhXanBSs$>G5Wa8SAj<{9 literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.PublicKeyCredential.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.PublicKeyCredential.serialized new file mode 100644 index 0000000000000000000000000000000000000000..6b2e6a8cc3fe42db44a292e90f1a2cb5b39ee344 GIT binary patch literal 2078 zcmb_dZA=_R7#^0dmPV8ki<)2xfl!iidj(1nOz^m#2i)<|gF8O1hR!W>$8yW=GBXQz zR8ec%(nvyWjo6rCt2OoqQ4_xcHC6kgHKt-(V6R&-i0^ zl6Q8V=Y5~|nRlmdfK-BkO~WAz(Xp(Cf*AIrAq|Hu1W5*#Y1A@=0{npn?Nu#Mmn|(u zK#?UEirO*iK`ND@@>AZ)lh-z9dIXT_23sUWW?@H!B9+LR>OsU%D51dXW<+8fk+?!6 zG7|onL?R;+ZH$uROOP^{J9xxy;x`*qHz=ug13~VgV6(dq4nk3ZYDjFQycV{Tis4W_ z+uWHTb8VC&j=TXQqH8Ka6gU!uSd+YlnFJ;bgG`}OoxwR1g!>24+Za%FL}v}$n^*(u z`}++F0}5J`lU(>SYKp&Dgh=GCE&&5f=k^iQS>VidW{QQZfrvv~Z zIshPv30IdG&#K{Du%;tSWkg~&{Ng#M_Dj>-xu!^IF_9?fO0dc6;}_gXWXH{gga=L(k!%Q#=+HD;bs?X=};JOM;Z-hawQ!VRy$PsOFL@T5q4c5AR z-KCw8PGv`5PkW`kwIR~za&|oGD+{RD)h0K#HlTVn?A&Fqs4Z1mXr*JPT;_s}tPf?0 z6=Gh`t53gIv+d$3(ezVlfZtdO1b?k*A+}E4%(<1eq3ws2e%q2pUia?Fni@HK=HkmO z@*klqrRDCKfu-)0*Pfgk>zL@6_kVP(C_Cf+0q^|u&&8EvbrYkLwsV_K4L-m0c=n6$ z7r)99{qM%qu#FII8FL_-(;(%*m=v6xs}ewp8)QMsD=@p015s=I`R>z=*cS8!7 zH#QPEq(W+7v>eDV7(pFWdz4rtf`L6TVb@%w)uHwAC-PeduG7y=Z)e7aJ5QsbwYkY; zW;2Md_Zs|tAG=zI_UH2{mtU2?GS4j`MDw@jOTAE0kQ(A!z1G3dkaJI;W*@c<@Ai`Z z;TAny(%`Fa@OVP1)m`rLwRSdnBuAITPHI>V$tpiasa_?DiY7s&S0l8l(pqWd&{!j+ zdHJg#R0w(^F016^_UgD$Vf_ntT^r3D>!sy6clQkL^N;`d#`G(PN-v$*dvoTQ+zBa{ zRRiJ-NzLho5y=^A1;!G5a|ZYv(#Y4LI`GBQv@4n%U6QL8us}UxbKGL56Pr-AlqK`ZqRD B1vvl! literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.authentication.WebAuthnAuthenticationRequestToken.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.authentication.WebAuthnAuthenticationRequestToken.serialized new file mode 100644 index 0000000000000000000000000000000000000000..5945cd459a5a5ff2116d3128645c62c2a4e9832c GIT binary patch literal 3891 zcmbtXeQZ-z6u;}bl?^vOrc5wHST=zO?HDlXwgkITyKWsD`(kXscx~^x$6nuiyYF^u zhfGlUii;?yNDLDc0x?95f_xc3{s7cDg+;=UuRp{X6oV241f%D^*R7)&uu7A@m%ew; z@0|NPzjN;CuB#|UA*fa&9-|@?Ui8!x&Wl?l(r8q$%SU(`Ft%VP`*J?oAR5^fiwv;0@Fre=oKS8$pZi``tLN;2Q3MHJ2-i@Yiq5Ff0 zZKBPcs6){;D50Mnc015e_FDp?c-S!-32 ziiY=d%hs^nPku05$j#_HwEXKuH^!=D3})9mww3VJ;W4B%504@hKi6*&>@`zB@pbDD7LuW1S?^5 zmQyBSU^`BMcR;+|&4Nkr%M`_GcC_C+h_UK{G4`s@7*e0{f$F*@0k< z0|fii_|2Oyk4!Anp%@1m~J@RWQNzr;snA60-S z9k1ozfno^PVs}$CBSKGk0g4&Y5D=RTRAY*)5km9}RwA%v6$T*nG#~?ke(Yy<7*~iFGR0Z6Dm7`YNAk zJ5+zAM3OOK?OqdF_v<$4_c@^%ruE+VX?^L?{Aro4j*O;_^al7aMIe^Rx0Yg;Hv^&fupNamA2_X_0M2Eyz@?scD3!?cI@3!{)Xpd z=5)t_rrUM;?JxASS8uF7UwdTzgrxYxomC1Oz&CKs!547~ z?-4obgL6Pz8SeuJ1)S&>v?p->=SN0tzd{PNsV`3OAHR5oeyf&zqSn4y7=`5}b5zez z`RqQ?$F5I9X{}nC%KBPrc4}YwcrZp)X>{UZXv!}&2cZrnWYH6Kasd!sU z<;E$6RrbQNGLM+ym|j#>K7US`%Ua_COBk*^yvWQbm9tGIL2_|IgQU=GbA~yCK@&+) zN`kBEIYGh8!lH_fo|hB$DBb>6!sRuI?G1E#@-TPv;@WjTez^a=Rhh>(Ex3N*rId}X z6gG5(8QC(dx^afO&TA7c{GC}h=~`o6@`j4ttxG#y>(`w-Irh(;Hw}wL-FWoQA8S{} zk6QS{#g(65L+LZ8cct$!9K5sEe`RaM(X(RlnK0OKTbxX$1%aR{rl{Jl=G6B(3oaU@Tq!HC!}~;9X6&k;sE$7 zd1!xkPZXz5N= z3{DApA_wP07}F{5#n8hkdQ>~1*l*KpA5n`FPVM2W(5f(jfn56wL{U+MVO549FrIjr zPGL0Cdi#^1lQcA;D`{4*Ox5|jbzk!C+#MYk)b^P$eES6U}X1QcD0=vhvstW#5 zplAg4b6#1%#=e?{@DkMRGvbZqn7q00GVG2 X_l!GZ7H4iV4^$g*GQstjz!3f){)3<2 literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.management.RelyingPartyAuthenticationRequest.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.management.RelyingPartyAuthenticationRequest.serialized new file mode 100644 index 0000000000000000000000000000000000000000..34f07eca8f47492278c841b45159bab6963056dc GIT binary patch literal 3196 zcmb_eZBSHI7(T2EE2tz=GFq52IO>e?p;3I!G_I#+>-30VE$uwl)^koiH0vSXP%J5*WY z1j_!nV9%awvl5*;5bFT5-8@HaumuScWR)yg;R#j0CQ9}1<$M%RwyO9Q3Xv2dQ=W93 zhk#j*X4nQzJQRGUD#AQXcVaON*y-kqC?yw$2x7=nF_I-pJtDvsCB!)8MeGd2P)I!q zNffRqO1KF~ucknn1J_08K)c_s5ZK70aXL~z-G|`gaM{4=Z||h&K#T(zM2&RyZ zgyT&PP9~ZrbD0y2Y|&`J7>49@^}`Mf?khOgB{ADpa9O3WjQSxfIz!a-Jh%Cim5WdHn$&oTZDbisfUdq!4I%nH zcq`?0+|=r;BmTC;bnLHLopi9{z`j#&RdRp$&Sqvi`dWt@^zS}9*j2l$cBuZujz!4{ zb6RVLj{LO5+*Q1*v&V9DT5sE{!_OqY@#&IxsG|QpFhy*UWfn55duT;PzopCV?HSC| z0lfnxLBcFh+l!VAt)K%K*v44v5%DTWV0a^5=6nJq3hffw$pnQ8D29TE*H(fUSfe9$ zTq2DXtIBJ4XyVeiLiYHi(^#;ROeUfM{PGx`uo zTbkx>f;^7|AKPlmX!8Y%RyT{*c1!!J8rk1oDYYysaoJ0pPM?tB$S!qNtu1%DZFO#X zQ^cH)6WBFEq&$;}7u}F=5@nKS&M;>%Xe`QdMfj8#@-o^Kq1BWrYw{zO7TRB*aji44 ztBGW%JmhKHP~ZK-dq>{hnt6Knx?6qEr|xp6QfolOrJ@X*ZoZ+R|K_4Ae`Yo;x!F>f zva|Y7`^J9vj_%86=lyozwqb*yTL9ktb^D76v)6z3{fnR71PgPs2Nr&8IC^(`@cQ2B zlb3|DixIH%_cr=p?sPJh|;9TgHNI`CT;pY|**%K1~C5 z{QYEK>X4{9G`0=$iW)C*L5Y9_NgYL&wV)7{SMk8|?wvO-oGGZgy|edc9f)&)nKTx} zz*x;w`It@zsnIAIiEA`6O3)0ijclient extension * output entry in {@link AuthenticationExtensionsClientOutputs}. @@ -24,7 +26,7 @@ * @see AuthenticationExtensionsClientOutputs#getOutputs() * @see CredentialPropertiesOutput */ -public interface AuthenticationExtensionsClientOutput { +public interface AuthenticationExtensionsClientOutput extends Serializable { /** * Gets the extension diff --git a/web/src/main/java/org/springframework/security/web/webauthn/api/AuthenticationExtensionsClientOutputs.java b/web/src/main/java/org/springframework/security/web/webauthn/api/AuthenticationExtensionsClientOutputs.java index 54038e95889..8f1adccf05e 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/api/AuthenticationExtensionsClientOutputs.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/api/AuthenticationExtensionsClientOutputs.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2024 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,7 @@ package org.springframework.security.web.webauthn.api; +import java.io.Serializable; import java.util.List; /** @@ -31,7 +32,7 @@ * @since 6.4 * @see PublicKeyCredential#getClientExtensionResults() */ -public interface AuthenticationExtensionsClientOutputs { +public interface AuthenticationExtensionsClientOutputs extends Serializable { /** * Gets all of the {@link AuthenticationExtensionsClientOutput}. diff --git a/web/src/main/java/org/springframework/security/web/webauthn/api/AuthenticatorAssertionResponse.java b/web/src/main/java/org/springframework/security/web/webauthn/api/AuthenticatorAssertionResponse.java index 5d4609951f3..045384128f3 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/api/AuthenticatorAssertionResponse.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/api/AuthenticatorAssertionResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2024 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,8 @@ package org.springframework.security.web.webauthn.api; +import java.io.Serial; + /** * The AuthenticatorAssertionResponse @@ -38,6 +40,9 @@ */ public final class AuthenticatorAssertionResponse extends AuthenticatorResponse { + @Serial + private static final long serialVersionUID = 324976481675434298L; + private final Bytes authenticatorData; private final Bytes signature; diff --git a/web/src/main/java/org/springframework/security/web/webauthn/api/AuthenticatorResponse.java b/web/src/main/java/org/springframework/security/web/webauthn/api/AuthenticatorResponse.java index 29f34751cd0..522f2d0874c 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/api/AuthenticatorResponse.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/api/AuthenticatorResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2024 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,8 @@ package org.springframework.security.web.webauthn.api; +import java.io.Serializable; + /** * The AuthenticatorResponse @@ -26,7 +28,7 @@ * @author Rob Winch * @since 6.4 */ -public abstract class AuthenticatorResponse { +public abstract class AuthenticatorResponse implements Serializable { private final Bytes clientDataJSON; diff --git a/web/src/main/java/org/springframework/security/web/webauthn/api/CredentialPropertiesOutput.java b/web/src/main/java/org/springframework/security/web/webauthn/api/CredentialPropertiesOutput.java index 193fe6cbb43..45deb043b5c 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/api/CredentialPropertiesOutput.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/api/CredentialPropertiesOutput.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2024 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,9 @@ package org.springframework.security.web.webauthn.api; +import java.io.Serial; +import java.io.Serializable; + /** * CredentialPropertiesOutput @@ -27,6 +30,9 @@ public class CredentialPropertiesOutput implements AuthenticationExtensionsClientOutput { + @Serial + private static final long serialVersionUID = -3201699313968303331L; + /** * The extension id. */ @@ -59,7 +65,10 @@ public ExtensionOutput getOutput() { * @since 6.4 * @see #getOutput() */ - public static final class ExtensionOutput { + public static final class ExtensionOutput implements Serializable { + + @Serial + private static final long serialVersionUID = 4557406414847424019L; private final boolean rk; diff --git a/web/src/main/java/org/springframework/security/web/webauthn/api/ImmutableAuthenticationExtensionsClientOutputs.java b/web/src/main/java/org/springframework/security/web/webauthn/api/ImmutableAuthenticationExtensionsClientOutputs.java index b1b74d48bf8..2e35bf4cfe8 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/api/ImmutableAuthenticationExtensionsClientOutputs.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/api/ImmutableAuthenticationExtensionsClientOutputs.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2024 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,7 @@ package org.springframework.security.web.webauthn.api; +import java.io.Serial; import java.util.Arrays; import java.util.List; @@ -26,6 +27,9 @@ */ public class ImmutableAuthenticationExtensionsClientOutputs implements AuthenticationExtensionsClientOutputs { + @Serial + private static final long serialVersionUID = -4656390173585180393L; + private final List> outputs; public ImmutableAuthenticationExtensionsClientOutputs(List> outputs) { diff --git a/web/src/main/java/org/springframework/security/web/webauthn/api/PublicKeyCredential.java b/web/src/main/java/org/springframework/security/web/webauthn/api/PublicKeyCredential.java index ac04b22f0fa..541801b8193 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/api/PublicKeyCredential.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/api/PublicKeyCredential.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2024 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,9 @@ package org.springframework.security.web.webauthn.api; +import java.io.Serial; +import java.io.Serializable; + /** * PublicKeyCredential * contains the attributes that are returned to the caller when a new credential is @@ -24,7 +27,10 @@ * @author Rob Winch * @since 6.4 */ -public final class PublicKeyCredential { +public final class PublicKeyCredential implements Serializable { + + @Serial + private static final long serialVersionUID = -1864035469276082606L; private final String id; @@ -34,7 +40,7 @@ public final class PublicKeyCredential { private final R response; - private final AuthenticatorAttachment authenticatorAttachment; + private final transient AuthenticatorAttachment authenticatorAttachment; private final AuthenticationExtensionsClientOutputs clientExtensionResults; diff --git a/web/src/main/java/org/springframework/security/web/webauthn/authentication/WebAuthnAuthenticationRequestToken.java b/web/src/main/java/org/springframework/security/web/webauthn/authentication/WebAuthnAuthenticationRequestToken.java index a885ed75493..7b851b74c2c 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/authentication/WebAuthnAuthenticationRequestToken.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/authentication/WebAuthnAuthenticationRequestToken.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2024 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,8 @@ package org.springframework.security.web.webauthn.authentication; +import java.io.Serial; + import org.springframework.security.authentication.AbstractAuthenticationToken; import org.springframework.security.core.authority.AuthorityUtils; import org.springframework.security.web.webauthn.management.RelyingPartyAuthenticationRequest; @@ -30,6 +32,9 @@ */ public class WebAuthnAuthenticationRequestToken extends AbstractAuthenticationToken { + @Serial + private static final long serialVersionUID = -1682693433877522403L; + private final RelyingPartyAuthenticationRequest webAuthnRequest; /** diff --git a/web/src/main/java/org/springframework/security/web/webauthn/management/RelyingPartyAuthenticationRequest.java b/web/src/main/java/org/springframework/security/web/webauthn/management/RelyingPartyAuthenticationRequest.java index 1dd1a66c843..62565d7f5c9 100644 --- a/web/src/main/java/org/springframework/security/web/webauthn/management/RelyingPartyAuthenticationRequest.java +++ b/web/src/main/java/org/springframework/security/web/webauthn/management/RelyingPartyAuthenticationRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2024 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,9 @@ package org.springframework.security.web.webauthn.management; +import java.io.Serial; +import java.io.Serializable; + import org.springframework.security.web.webauthn.api.AuthenticatorAssertionResponse; import org.springframework.security.web.webauthn.api.PublicKeyCredential; import org.springframework.security.web.webauthn.api.PublicKeyCredentialRequestOptions; @@ -29,7 +32,10 @@ * @since 6.4 * @see WebAuthnRelyingPartyOperations#authenticate(RelyingPartyAuthenticationRequest) */ -public class RelyingPartyAuthenticationRequest { +public class RelyingPartyAuthenticationRequest implements Serializable { + + @Serial + private static final long serialVersionUID = -928083091875202086L; private final PublicKeyCredentialRequestOptions requestOptions; diff --git a/web/src/test/java/org/springframework/security/web/webauthn/api/TestAuthenticationAssertionResponses.java b/web/src/test/java/org/springframework/security/web/webauthn/api/TestAuthenticationAssertionResponses.java new file mode 100644 index 00000000000..a81b0d06ab7 --- /dev/null +++ b/web/src/test/java/org/springframework/security/web/webauthn/api/TestAuthenticationAssertionResponses.java @@ -0,0 +1,37 @@ +/* + * Copyright 2002-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.security.web.webauthn.api; + +/** + * @author Max Batischev + */ +public final class TestAuthenticationAssertionResponses { + + public static AuthenticatorAssertionResponse.AuthenticatorAssertionResponseBuilder createAuthenticatorAssertionResponse() { + return AuthenticatorAssertionResponse.builder() + .authenticatorData(Bytes.fromBase64("SZYN5YgOjGh0NBcPZHZgW4_krrmihjLHmVzzuoMdl2MdAAAAAA")) + .clientDataJSON(Bytes.fromBase64( + "eyJ0eXBlIjoid2ViYXV0aG4uZ2V0IiwiY2hhbGxlbmdlIjoiaDB2Z3dHUWpvQ3pBekRVc216UHBrLUpWSUpSUmduMEw0S1ZTWU5SY0VaYyIsIm9yaWdpbiI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MCIsImNyb3NzT3JpZ2luIjpmYWxzZX0")) + .signature(Bytes.fromBase64( + "MEUCIAdfzPAn3voyXynwa0IXk1S0envMY5KP3NEe9aj4B2BuAiEAm_KJhQoWXdvfhbzwACU3NM4ltQe7_Il46qFUwtpuTdg")) + .userHandle(Bytes.fromBase64("oWJtkJ6vJ_m5b84LB4_K7QKTCTEwLIjCh4tFMCGHO4w")); + } + + private TestAuthenticationAssertionResponses() { + } + +} diff --git a/web/src/test/java/org/springframework/security/web/webauthn/api/TestPublicKeyCredential.java b/web/src/test/java/org/springframework/security/web/webauthn/api/TestPublicKeyCredential.java index f2f919b3daf..5ae19ac23cc 100644 --- a/web/src/test/java/org/springframework/security/web/webauthn/api/TestPublicKeyCredential.java +++ b/web/src/test/java/org/springframework/security/web/webauthn/api/TestPublicKeyCredential.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2024 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -38,6 +38,17 @@ public static PublicKeyCredential.PublicKeyCre .clientExtensionResults(clientExtensionResults); } + public static PublicKeyCredential.PublicKeyCredentialBuilder createPublicKeyCredential( + R response, AuthenticationExtensionsClientOutputs outputs) { + return PublicKeyCredential.builder() + .id("AX6nVVERrH6opMafUGn3Z9EyNEy6cftfBKV_2YxYl1jdW8CSJxMKGXFV3bnrKTiMSJeInkG7C6B2lPt8E5i3KaM") + .rawId(Bytes + .fromBase64("AX6nVVERrH6opMafUGn3Z9EyNEy6cftfBKV_2YxYl1jdW8CSJxMKGXFV3bnrKTiMSJeInkG7C6B2lPt8E5i3KaM")) + .response(response) + .type(PublicKeyCredentialType.PUBLIC_KEY) + .clientExtensionResults(outputs); + } + private TestPublicKeyCredential() { } From 946812691e5b9c6820060b2bfef95ecb69462c38 Mon Sep 17 00:00:00 2001 From: Josh Cummings <3627351+jzheaux@users.noreply.github.com> Date: Fri, 14 Feb 2025 12:59:59 -0700 Subject: [PATCH 83/87] Make AuthenticatorAttestation Serializable Issue gh-16481 --- ...gSecurityCoreVersionSerializableTests.java | 10 +++++++++- ...thn.api.AuthenticatorAttachment.serialized | Bin 0 -> 130 bytes ...ebauthn.api.PublicKeyCredential.serialized | Bin 2078 -> 2272 bytes ...AuthnAuthenticationRequestToken.serialized | Bin 3891 -> 3974 bytes ...lyingPartyAuthenticationRequest.serialized | Bin 3196 -> 3279 bytes .../webauthn/api/AuthenticatorAttachment.java | 14 +++++++++++++- .../web/webauthn/api/PublicKeyCredential.java | 2 +- 7 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.AuthenticatorAttachment.serialized diff --git a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java index 7f4d78f41bb..2982d2a005a 100644 --- a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java +++ b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java @@ -46,6 +46,7 @@ import org.apereo.cas.client.validation.AssertionImpl; import org.instancio.Instancio; import org.instancio.InstancioApi; +import org.instancio.InstancioOfClassApi; import org.instancio.Select; import org.instancio.generator.Generator; import org.junit.jupiter.api.Disabled; @@ -55,6 +56,7 @@ import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider; +import org.springframework.core.ResolvableType; import org.springframework.core.type.filter.AssignableTypeFilter; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpSession; @@ -214,6 +216,7 @@ import org.springframework.security.web.webauthn.api.AuthenticationExtensionsClientInputs; import org.springframework.security.web.webauthn.api.AuthenticationExtensionsClientOutputs; import org.springframework.security.web.webauthn.api.AuthenticatorAssertionResponse; +import org.springframework.security.web.webauthn.api.AuthenticatorAttachment; import org.springframework.security.web.webauthn.api.AuthenticatorTransport; import org.springframework.security.web.webauthn.api.Bytes; import org.springframework.security.web.webauthn.api.CredProtectAuthenticationExtensionsClientInput; @@ -658,6 +661,7 @@ class SpringSecurityCoreVersionSerializableTests { generatorByClassName.put(RelyingPartyAuthenticationRequest.class, (r) -> authRequest); generatorByClassName.put(PublicKeyCredential.class, (r) -> credential); generatorByClassName.put(WebAuthnAuthenticationRequestToken.class, (r) -> requestToken); + generatorByClassName.put(AuthenticatorAttachment.class, (r) -> AuthenticatorAttachment.PLATFORM); // @formatter:on } @@ -768,7 +772,11 @@ static Stream> getClassesToSerialize() throws Exception { } private static InstancioApi instancioWithDefaults(Class clazz) { - InstancioApi instancio = Instancio.of(clazz); + InstancioOfClassApi instancio = Instancio.of(clazz); + ResolvableType[] generics = ResolvableType.forClass(clazz).getGenerics(); + for (ResolvableType type : generics) { + instancio.withTypeParameters(type.resolve()); + } if (generatorByClassName.containsKey(clazz)) { instancio.supply(Select.all(clazz), generatorByClassName.get(clazz)); } diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.AuthenticatorAttachment.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.AuthenticatorAttachment.serialized new file mode 100644 index 0000000000000000000000000000000000000000..449d5b9a9814420db1f69c3f4be1de49b487a2a1 GIT binary patch literal 130 zcmWlSy$!-J6b2tikq{+=I2{dD3c7Sm@WpZ*ga7pWoWM>rjKl!!KvJA^SKa$ZO<}qw zwyI=y(T}OSJ!DKA{-WA27XSbN literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.PublicKeyCredential.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.api.PublicKeyCredential.serialized index 6b2e6a8cc3fe42db44a292e90f1a2cb5b39ee344..2edec67206b88d76f897e14a1ff2853be5f9881a 100644 GIT binary patch delta 287 zcmbOy@IY`vupFBYgLqtF$<^$RjZ?B?lrh z`95npKTAbHF-U`CDTtJr9LminpcvUoLG`yY?&P>lsEGaEYg$i($7N-_@B<7{$Ktw8v7@UDdSx)}Irp3=(QBVw0Ct3<3B_?aK ycgZ6QFfcGMGlyFv3r#-2uE!2j|CK!e&i3JG5n!q)C}H3#C{4=AOxDd#tposm%Q$-g diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.authentication.WebAuthnAuthenticationRequestToken.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.authentication.WebAuthnAuthenticationRequestToken.serialized index 5945cd459a5a5ff2116d3128645c62c2a4e9832c..b7eda5a62d70b7c0ae5a54b7a07ddea7caa4be07 100644 GIT binary patch delta 205 zcmdli*CxLqn?;(P+_M>f%Ke`N5^f4wKd84uG*Yw{S}_GD>Wo&!fo*7dy|J G!UzEE%s!|9 delta 186 zcmZpZ-z>Kwn}v~e^97bf#?3}-=b3HAeHa82OG`3R^GY(46HD@oToOwX3mNJdfD)X= zndy0nC8b5FPyw#e;?yFK#JrRoh{$9+u5^C!ih^R0yhbUA)SkSBt4khPfPsO5nK|4V kS!l91w;nr8eFJv@jJ^3fw-h6z_~uVMnv8HUCB76!08@-KSpWb4 diff --git a/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.management.RelyingPartyAuthenticationRequest.serialized b/config/src/test/resources/serialized/6.4.x/org.springframework.security.web.webauthn.management.RelyingPartyAuthenticationRequest.serialized index 34f07eca8f47492278c841b45159bab6963056dc..ea313db10713c1763ccc703c91568a83e54f1a59 100644 GIT binary patch delta 261 zcmew(ab9vmA)_3d4}*AOX-P(EUP)$hVo83HV@XM3az-wYU&7!%@x1=zy^P$v$imi} zix>+TSqqAb7-A*|vgu9sSu|hsg$V1i;xVI9eFlC+l*y z2=M|fOU_8l$w|#ihZ=pDGao2v%(WA){4>{VM&8N&-1qp|D+)>&I17qW(^89yQd0nn C2v8&d delta 263 zcmX>v`A1?yAtNK}=4*_Fj4Z`P3^9`vc=RUE;Z~n)&&0lY1#>O4BfAfSU}9-WMrvM3 zW^!UlevwOJNn#;G9RpB;vp6$7FR`SwC>1KeRa%@{Q`C}MC18|lr$J$XL6 z7C(DMK`}_JWGRT0nS6u2OCDK(fq{XUIoujqXmUP>9y?6^5{>{k`!`1mBirN#&K4ma zpi`1F5_57=^U@&}PZs0K2THba?Sw0LAuthenticatorAttachment. @@ -23,7 +27,10 @@ * @author Rob Winch * @since 6.4 */ -public final class AuthenticatorAttachment { +public final class AuthenticatorAttachment implements Serializable { + + @Serial + private static final long serialVersionUID = 8446133215195918090L; /** * Indicates implemen private final R response; - private final transient AuthenticatorAttachment authenticatorAttachment; + private final AuthenticatorAttachment authenticatorAttachment; private final AuthenticationExtensionsClientOutputs clientExtensionResults; From 06026684e518471a7e74ae8676e6cc8378d722b9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Feb 2025 03:22:37 +0000 Subject: [PATCH 84/87] Bump org.springframework.data:spring-data-bom from 2024.0.8 to 2024.0.9 Bumps [org.springframework.data:spring-data-bom](https://github.com/spring-projects/spring-data-bom) from 2024.0.8 to 2024.0.9. - [Release notes](https://github.com/spring-projects/spring-data-bom/releases) - [Commits](https://github.com/spring-projects/spring-data-bom/compare/2024.0.8...2024.0.9) --- updated-dependencies: - dependency-name: org.springframework.data:spring-data-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index bda5556e0bc..a1ce16f44ce 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -84,7 +84,7 @@ org-seleniumhq-selenium-selenium-support = "org.seleniumhq.selenium:selenium-sup org-skyscreamer-jsonassert = "org.skyscreamer:jsonassert:1.5.3" org-slf4j-log4j-over-slf4j = "org.slf4j:log4j-over-slf4j:1.7.36" org-slf4j-slf4j-api = "org.slf4j:slf4j-api:2.0.16" -org-springframework-data-spring-data-bom = "org.springframework.data:spring-data-bom:2024.0.8" +org-springframework-data-spring-data-bom = "org.springframework.data:spring-data-bom:2024.0.9" org-springframework-ldap-spring-ldap-core = "org.springframework.ldap:spring-ldap-core:3.2.11" org-springframework-spring-framework-bom = { module = "org.springframework:spring-framework-bom", version.ref = "org-springframework" } org-synchronoss-cloud-nio-multipart-parser = "org.synchronoss.cloud:nio-multipart-parser:1.1.0" From 6fcbc0ea2a61a774f9b105a245f799e04edaebbe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Feb 2025 03:43:16 +0000 Subject: [PATCH 85/87] Bump org.hibernate.orm:hibernate-core from 6.6.7.Final to 6.6.8.Final Bumps [org.hibernate.orm:hibernate-core](https://github.com/hibernate/hibernate-orm) from 6.6.7.Final to 6.6.8.Final. - [Release notes](https://github.com/hibernate/hibernate-orm/releases) - [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.8/changelog.txt) - [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.7...6.6.8) --- updated-dependencies: - dependency-name: org.hibernate.orm:hibernate-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b97921a4541..529aa6e4f56 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -70,7 +70,7 @@ org-bouncycastle-bcprov-jdk15on = { module = "org.bouncycastle:bcprov-jdk18on", org-eclipse-jetty-jetty-server = { module = "org.eclipse.jetty:jetty-server", version.ref = "org-eclipse-jetty" } org-eclipse-jetty-jetty-servlet = { module = "org.eclipse.jetty:jetty-servlet", version.ref = "org-eclipse-jetty" } org-hamcrest = "org.hamcrest:hamcrest:2.2" -org-hibernate-orm-hibernate-core = "org.hibernate.orm:hibernate-core:6.6.7.Final" +org-hibernate-orm-hibernate-core = "org.hibernate.orm:hibernate-core:6.6.8.Final" org-hsqldb = "org.hsqldb:hsqldb:2.7.4" org-jetbrains-kotlin-kotlin-bom = { module = "org.jetbrains.kotlin:kotlin-bom", version.ref = "org-jetbrains-kotlin" } org-jetbrains-kotlin-kotlin-gradle-plugin = "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.25" From d2f825bc74b7afab7004aab4be373487e5ff7fcd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Feb 2025 03:43:35 +0000 Subject: [PATCH 86/87] Bump org.springframework.data:spring-data-bom from 2024.1.2 to 2024.1.3 Bumps [org.springframework.data:spring-data-bom](https://github.com/spring-projects/spring-data-bom) from 2024.1.2 to 2024.1.3. - [Release notes](https://github.com/spring-projects/spring-data-bom/releases) - [Commits](https://github.com/spring-projects/spring-data-bom/compare/2024.1.2...2024.1.3) --- updated-dependencies: - dependency-name: org.springframework.data:spring-data-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 529aa6e4f56..533f39e9ace 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -88,7 +88,7 @@ org-seleniumhq-selenium-selenium-support = "org.seleniumhq.selenium:selenium-sup org-skyscreamer-jsonassert = "org.skyscreamer:jsonassert:1.5.3" org-slf4j-log4j-over-slf4j = "org.slf4j:log4j-over-slf4j:1.7.36" org-slf4j-slf4j-api = "org.slf4j:slf4j-api:2.0.16" -org-springframework-data-spring-data-bom = "org.springframework.data:spring-data-bom:2024.1.2" +org-springframework-data-spring-data-bom = "org.springframework.data:spring-data-bom:2024.1.3" org-springframework-ldap-spring-ldap-core = "org.springframework.ldap:spring-ldap-core:3.2.11" org-springframework-spring-framework-bom = { module = "org.springframework:spring-framework-bom", version.ref = "org-springframework" } org-synchronoss-cloud-nio-multipart-parser = "org.synchronoss.cloud:nio-multipart-parser:1.1.0" From e7431a3a72e37d18bdaf5909ddf3a459bf2fa7fd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 18 Feb 2025 16:52:09 +0000 Subject: [PATCH 87/87] Release 6.4.3 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 7ea67c6b3ac..75d8d36713d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -14,7 +14,7 @@ # limitations under the License. # springBootVersion=3.3.3 -version=6.4.3-SNAPSHOT +version=6.4.3 samplesBranch=main org.gradle.jvmargs=-Xmx3g -XX:+HeapDumpOnOutOfMemoryError org.gradle.parallel=true