From 4fb6a33d368467fb64da23d5a168d4f1893019d9 Mon Sep 17 00:00:00 2001 From: Marcus Hert Da Coregio Date: Thu, 4 Jan 2024 15:25:15 -0300 Subject: [PATCH] Verify Serializable Objects Are Deserializable Between Minor Versions This commit introduces a test that verifies that Spring Security domain classes that implements Serializable and have the same serialVersionUID as SpringSecurityCoreVersion#SERIAL_VERSION_UID can be deserialized between minor versions. This commit also introduces another test that should be used to generate the files containing the serialized content of the objects. Closes gh-3737 --- config/spring-security-config.gradle | 7 + ...gSecurityCoreVersionSerializableTests.java | 318 ++++++++++++++++++ ...k.security.access.intercept.RunAsUserToken | Bin 0 -> 1379 bytes ...thentication.RememberMeAuthenticationToken | Bin 0 -> 1200 bytes ...cation.UsernamePasswordAuthenticationToken | Bin 0 -> 1118 bytes ...uthentication.jaas.JaasAuthenticationToken | Bin 0 -> 1205 bytes ...y.authentication.jaas.JaasGrantedAuthority | Bin 0 -> 168 bytes ...entication.CasAssertionAuthenticationToken | Bin 0 -> 1454 bytes ....cas.authentication.CasAuthenticationToken | Bin 0 -> 2094 bytes ...cation.CasServiceTicketAuthenticationToken | Bin 0 -> 552 bytes ...rity.core.authority.SimpleGrantedAuthority | Bin 0 -> 124 bytes ....security.core.context.SecurityContextImpl | Bin 0 -> 153 bytes ...k.security.core.session.SessionInformation | Bin 0 -> 849 bytes ...ngframework.security.core.userdetails.User | Bin 0 -> 291 bytes ....core.userdetails.User$AuthorityComparator | Bin 0 -> 91 bytes ...rk.security.ldap.userdetails.InetOrgPerson | Bin 0 -> 1222 bytes ...urity.ldap.userdetails.LdapUserDetailsImpl | Bin 0 -> 396 bytes ...framework.security.ldap.userdetails.Person | Bin 0 -> 667 bytes ...urity.oauth2.client.OAuth2AuthorizedClient | Bin 0 -> 3220 bytes ...ity.oauth2.client.OAuth2AuthorizedClientId | Bin 0 -> 171 bytes ...t.authentication.OAuth2AuthenticationToken | Bin 0 -> 1623 bytes ...OAuth2AuthorizationCodeAuthenticationToken | Bin 0 -> 5448 bytes ...hentication.OAuth2LoginAuthenticationToken | Bin 0 -> 5541 bytes ...th2.client.registration.ClientRegistration | Bin 0 -> 2235 bytes ...nt.registration.ClientRegistration$Builder | Bin 0 -> 1609 bytes ....security.oauth2.core.AuthenticationMethod | Bin 0 -> 118 bytes ...ecurity.oauth2.core.AuthorizationGrantType | Bin 0 -> 121 bytes ...ity.oauth2.core.ClientAuthenticationMethod | Bin 0 -> 123 bytes ...ty.oauth2.core.OAuth2AccessToken$TokenType | Bin 0 -> 124 bytes ...framework.security.oauth2.core.OAuth2Error | Bin 0 -> 159 bytes ....core.endpoint.OAuth2AuthorizationExchange | Bin 0 -> 2145 bytes ...2.core.endpoint.OAuth2AuthorizationRequest | Bin 0 -> 1469 bytes ....core.endpoint.OAuth2AuthorizationResponse | Bin 0 -> 464 bytes ...e.endpoint.OAuth2AuthorizationResponseType | Bin 0 -> 137 bytes ...ork.security.oauth2.core.oidc.OidcUserInfo | Bin 0 -> 328 bytes ...ecurity.oauth2.core.user.DefaultOAuth2User | Bin 0 -> 934 bytes ...urity.oauth2.core.user.OAuth2UserAuthority | Bin 0 -> 376 bytes ...er.resource.BearerTokenAuthenticationToken | Bin 0 -> 781 bytes ...e.authentication.BearerTokenAuthentication | Bin 0 -> 3022 bytes ...hentication.BearerTokenAuthenticationToken | Bin 0 -> 684 bytes ...urce.authentication.JwtAuthenticationToken | Bin 0 -> 1554 bytes ...ramework.security.provisioning.MutableUser | Bin 0 -> 192 bytes ...ngframework.security.saml2.core.Saml2Error | Bin 0 -> 142 bytes ...eb.authentication.WebAuthenticationDetails | Bin 0 -> 162 bytes ...reauth.PreAuthenticatedAuthenticationToken | Bin 0 -> 1231 bytes ...GrantedAuthoritiesWebAuthenticationDetails | Bin 0 -> 385 bytes ...tion.switchuser.SwitchUserGrantedAuthority | Bin 0 -> 203 bytes ...urity.web.savedrequest.DefaultSavedRequest | Bin 0 -> 1784 bytes ...work.security.web.savedrequest.SavedCookie | Bin 0 -> 249 bytes .../spring-security-dependencies.gradle | 1 + gradle/libs.versions.toml | 1 + 51 files changed, 327 insertions(+) create mode 100644 config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.access.intercept.RunAsUserToken create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.authentication.RememberMeAuthenticationToken create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.authentication.UsernamePasswordAuthenticationToken create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.authentication.jaas.JaasAuthenticationToken create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.authentication.jaas.JaasGrantedAuthority create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.cas.authentication.CasAssertionAuthenticationToken create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.cas.authentication.CasAuthenticationToken create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.cas.authentication.CasServiceTicketAuthenticationToken create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.core.authority.SimpleGrantedAuthority create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.core.context.SecurityContextImpl create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.core.session.SessionInformation create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.core.userdetails.User create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.core.userdetails.User$AuthorityComparator create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.ldap.userdetails.InetOrgPerson create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.ldap.userdetails.LdapUserDetailsImpl create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.ldap.userdetails.Person create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.client.OAuth2AuthorizedClient create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.client.OAuth2AuthorizedClientId create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.client.authentication.OAuth2AuthorizationCodeAuthenticationToken create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.client.authentication.OAuth2LoginAuthenticationToken create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.client.registration.ClientRegistration create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.client.registration.ClientRegistration$Builder create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.core.AuthenticationMethod create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.core.AuthorizationGrantType create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.core.ClientAuthenticationMethod create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.core.OAuth2AccessToken$TokenType create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.core.OAuth2Error create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationExchange create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationResponse create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationResponseType create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.core.oidc.OidcUserInfo create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.core.user.DefaultOAuth2User create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.core.user.OAuth2UserAuthority create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.server.resource.BearerTokenAuthenticationToken create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.server.resource.authentication.BearerTokenAuthentication create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.server.resource.authentication.BearerTokenAuthenticationToken create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationToken create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.provisioning.MutableUser create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.saml2.core.Saml2Error create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.web.authentication.WebAuthenticationDetails create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.web.authentication.preauth.PreAuthenticatedGrantedAuthoritiesWebAuthenticationDetails create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.web.authentication.switchuser.SwitchUserGrantedAuthority create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.web.savedrequest.DefaultSavedRequest create mode 100644 config/src/test/resources/serialized/6.2.x/org.springframework.security.web.savedrequest.SavedCookie diff --git a/config/spring-security-config.gradle b/config/spring-security-config.gradle index 05dbc07057..c517447e18 100644 --- a/config/spring-security-config.gradle +++ b/config/spring-security-config.gradle @@ -112,6 +112,7 @@ dependencies { testImplementation ('org.apache.maven.resolver:maven-resolver-transport-http') { exclude group: "org.slf4j", module: "jcl-over-slf4j" } + testImplementation libs.org.instancio.instancio.junit testRuntimeOnly 'org.hsqldb:hsqldb' } @@ -153,3 +154,9 @@ tasks.withType(KotlinCompile).configureEach { jvmTarget = "17" } } + +configure(project.tasks.withType(Test)) { + doFirst { + systemProperties['springSecurityVersion'] = version + } +} diff --git a/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java new file mode 100644 index 0000000000..544f9a3a7f --- /dev/null +++ b/config/src/test/java/org/springframework/security/SpringSecurityCoreVersionSerializableTests.java @@ -0,0 +1,318 @@ +/* + * 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. + * 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; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.NotSerializableException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.ObjectStreamClass; +import java.io.Serializable; +import java.lang.reflect.Modifier; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Stream; + +import org.apereo.cas.client.validation.AssertionImpl; +import org.instancio.Instancio; +import org.instancio.InstancioApi; +import org.instancio.Select; +import org.instancio.generator.Generator; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; + +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.intercept.RunAsUserToken; +import org.springframework.security.authentication.AnonymousAuthenticationToken; +import org.springframework.security.authentication.RememberMeAuthenticationToken; +import org.springframework.security.authentication.TestAuthentication; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.authentication.jaas.JaasAuthenticationToken; +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.SpringSecurityCoreVersion; +import org.springframework.security.core.session.SessionInformation; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.oauth2.client.OAuth2AuthorizedClient; +import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken; +import org.springframework.security.oauth2.client.authentication.OAuth2AuthorizationCodeAuthenticationToken; +import org.springframework.security.oauth2.client.authentication.OAuth2LoginAuthenticationToken; +import org.springframework.security.oauth2.client.authentication.TestOAuth2AuthenticationTokens; +import org.springframework.security.oauth2.client.authentication.TestOAuth2AuthorizationCodeAuthenticationTokens; +import org.springframework.security.oauth2.client.registration.ClientRegistration; +import org.springframework.security.oauth2.client.registration.TestClientRegistrations; +import org.springframework.security.oauth2.core.TestOAuth2AccessTokens; +import org.springframework.security.oauth2.core.TestOAuth2AuthenticatedPrincipals; +import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationExchange; +import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest; +import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationResponse; +import org.springframework.security.oauth2.core.endpoint.TestOAuth2AuthorizationExchanges; +import org.springframework.security.oauth2.core.endpoint.TestOAuth2AuthorizationRequests; +import org.springframework.security.oauth2.core.endpoint.TestOAuth2AuthorizationResponses; +import org.springframework.security.oauth2.core.oidc.OidcUserInfo; +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.TestJwts; +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.web.authentication.WebAuthenticationDetails; +import org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.fail; + +/** + * Tests that Spring Security classes that implements {@link Serializable} and have the + * same serial version as {@link SpringSecurityCoreVersion#SERIAL_VERSION_UID} can be + * deserialized from a previous minor version. + *

+ * For example, all classes from version 6.2.x that matches the previous requirement + * should be serialized and saved to a folder, and then later on, in 6.3.x, it is verified + * if they can be deserialized + * + * @author Marcus da Coregio + * @since 6.2.2 + * @see GitHub + * Issue #3737 + */ +class SpringSecurityCoreVersionSerializableTests { + + private static final Map, Generator> generatorByClassName = new HashMap<>(); + + static final long securitySerialVersionUid = SpringSecurityCoreVersion.SERIAL_VERSION_UID; + + static Path currentVersionFolder = Paths.get("src/test/resources/serialized/" + getCurrentVersion()); + + static Path previousVersionFolder = Paths.get("src/test/resources/serialized/" + getPreviousVersion()); + + static { + ClientRegistration.Builder clientRegistrationBuilder = TestClientRegistrations.clientRegistration(); + ClientRegistration clientRegistration = clientRegistrationBuilder.build(); + UserDetails user = TestAuthentication.user(); + WebAuthenticationDetails details = new WebAuthenticationDetails("remote", "sessionId"); + generatorByClassName.put(DefaultOAuth2User.class, (r) -> TestOAuth2Users.create()); + generatorByClassName.put(ClientRegistration.class, (r) -> clientRegistration); + generatorByClassName.put(ClientRegistration.ProviderDetails.class, + (r) -> clientRegistration.getProviderDetails()); + generatorByClassName.put(ClientRegistration.ProviderDetails.UserInfoEndpoint.class, + (r) -> clientRegistration.getProviderDetails().getUserInfoEndpoint()); + generatorByClassName.put(ClientRegistration.Builder.class, (r) -> clientRegistrationBuilder); + generatorByClassName.put(OAuth2AuthorizationRequest.class, + (r) -> TestOAuth2AuthorizationRequests.request().build()); + generatorByClassName.put(OAuth2AuthorizationResponse.class, + (r) -> TestOAuth2AuthorizationResponses.success().build()); + generatorByClassName.put(OAuth2AuthorizedClient.class, + (r) -> new OAuth2AuthorizedClient(clientRegistration, "principal", TestOAuth2AccessTokens.noScopes())); + generatorByClassName.put(OAuth2UserAuthority.class, (r) -> new OAuth2UserAuthority(Map.of("username", "user"))); + generatorByClassName.put(OAuth2AuthorizationExchange.class, (r) -> TestOAuth2AuthorizationExchanges.success()); + generatorByClassName.put(OidcUserInfo.class, (r) -> OidcUserInfo.builder().email("email@example.com").build()); + generatorByClassName.put(SessionInformation.class, + (r) -> new SessionInformation(user, r.alphanumeric(4), new Date(1704378933936L))); + generatorByClassName.put(OAuth2LoginAuthenticationToken.class, (r) -> { + var token = new OAuth2LoginAuthenticationToken(clientRegistration, + TestOAuth2AuthorizationExchanges.success()); + token.setDetails(details); + return token; + }); + generatorByClassName.put(OAuth2AuthorizationCodeAuthenticationToken.class, (r) -> { + var token = TestOAuth2AuthorizationCodeAuthenticationTokens.authenticated(); + token.setDetails(details); + return token; + }); + generatorByClassName + .put(org.springframework.security.oauth2.server.resource.BearerTokenAuthenticationToken.class, (r) -> { + var token = new org.springframework.security.oauth2.server.resource.BearerTokenAuthenticationToken( + "token"); + token.setDetails(details); + return token; + }); + generatorByClassName.put(BearerTokenAuthenticationToken.class, (r) -> { + var token = new BearerTokenAuthenticationToken("token"); + token.setDetails(details); + return token; + }); + generatorByClassName.put(BearerTokenAuthentication.class, (r) -> { + var token = new BearerTokenAuthentication(TestOAuth2AuthenticatedPrincipals.active(), + TestOAuth2AccessTokens.noScopes(), user.getAuthorities()); + token.setDetails(details); + return token; + }); + generatorByClassName.put(OAuth2AuthenticationToken.class, (r) -> { + var token = TestOAuth2AuthenticationTokens.authenticated(); + token.setDetails(details); + return token; + }); + generatorByClassName.put(JwtAuthenticationToken.class, (r) -> { + var token = new JwtAuthenticationToken(TestJwts.user()); + token.setDetails(details); + return token; + }); + generatorByClassName.put(RunAsUserToken.class, (r) -> { + RunAsUserToken token = new RunAsUserToken("key", user, "creds", user.getAuthorities(), + AnonymousAuthenticationToken.class); + token.setDetails(details); + return token; + }); + generatorByClassName.put(CasServiceTicketAuthenticationToken.class, (r) -> { + CasServiceTicketAuthenticationToken token = CasServiceTicketAuthenticationToken.stateless("creds"); + token.setDetails(details); + return token; + }); + generatorByClassName.put(CasAuthenticationToken.class, (r) -> { + var token = new CasAuthenticationToken("key", user, "Password", user.getAuthorities(), user, + new AssertionImpl("test")); + token.setDetails(details); + return token; + }); + generatorByClassName.put(CasAssertionAuthenticationToken.class, (r) -> { + var token = new CasAssertionAuthenticationToken(new AssertionImpl("test"), "ticket"); + token.setDetails(details); + return token; + }); + generatorByClassName.put(RememberMeAuthenticationToken.class, (r) -> { + RememberMeAuthenticationToken token = new RememberMeAuthenticationToken("key", user, user.getAuthorities()); + token.setDetails(details); + return token; + }); + generatorByClassName.put(PreAuthenticatedAuthenticationToken.class, (r) -> { + PreAuthenticatedAuthenticationToken token = new PreAuthenticatedAuthenticationToken(user, "creds", + user.getAuthorities()); + token.setDetails(details); + return token; + }); + generatorByClassName.put(UsernamePasswordAuthenticationToken.class, (r) -> { + var token = UsernamePasswordAuthenticationToken.unauthenticated(user, "creds"); + token.setDetails(details); + return token; + }); + generatorByClassName.put(JaasAuthenticationToken.class, (r) -> { + var token = new JaasAuthenticationToken(user, "creds", null); + token.setDetails(details); + return token; + }); + } + + @ParameterizedTest + @MethodSource("getClassesToSerialize") + @Disabled("This method should only be used to serialize the classes once") + void serializeCurrentVersionClasses(Class clazz) throws Exception { + Files.createDirectories(currentVersionFolder); + Path filePath = Paths.get(currentVersionFolder.toAbsolutePath() + "/" + clazz.getName()); + File file = filePath.toFile(); + if (file.exists()) { + return; + } + Files.createFile(filePath); + Object instance = instancioWithDefaults(clazz).create(); + assertThat(instance).isInstanceOf(clazz); + try (FileOutputStream fileOutputStream = new FileOutputStream(file); + ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream)) { + objectOutputStream.writeObject(instance); + objectOutputStream.flush(); + } + catch (NotSerializableException ex) { + Files.delete(filePath); + fail("Could not serialize " + clazz.getName(), ex); + } + } + + @ParameterizedTest + @MethodSource("getFilesToDeserialize") + @Disabled("The feature is only supported for versions >= 6.3") + void shouldBeAbleToDeserializeClassFromPreviousVersion(Path filePath) { + try (FileInputStream fileInputStream = new FileInputStream(filePath.toFile()); + ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream)) { + Object obj = objectInputStream.readObject(); + Class clazz = Class.forName(filePath.getFileName().toString()); + assertThat(obj).isInstanceOf(clazz); + } + catch (IOException | ClassNotFoundException ex) { + fail("Could not deserialize " + filePath, ex); + } + } + + static Stream getFilesToDeserialize() throws IOException { + assertThat(previousVersionFolder.toFile().exists()) + .as("Make sure that the " + previousVersionFolder + " exists and is not empty") + .isTrue(); + try (Stream files = Files.list(previousVersionFolder)) { + if (files.findFirst().isEmpty()) { + fail("Please make sure to run SpringSecurityCoreVersionSerializableTests#serializeCurrentVersionClasses for the " + + getPreviousVersion() + " version"); + } + } + return Files.list(previousVersionFolder); + } + + static Stream> getClassesToSerialize() throws Exception { + ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false); + provider.addIncludeFilter(new AssignableTypeFilter(Serializable.class)); + List> classes = new ArrayList<>(); + + Set components = provider.findCandidateComponents("org/springframework/security"); + for (BeanDefinition component : components) { + Class clazz = Class.forName(component.getBeanClassName()); + boolean isAbstract = Modifier.isAbstract(clazz.getModifiers()); + boolean matchesExpectedSerialVersion = ObjectStreamClass.lookup(clazz) + .getSerialVersionUID() == securitySerialVersionUid; + if (!isAbstract && matchesExpectedSerialVersion) { + classes.add(clazz); + } + } + return classes.stream(); + } + + private static InstancioApi instancioWithDefaults(Class clazz) { + InstancioApi instancio = Instancio.of(clazz); + if (generatorByClassName.containsKey(clazz)) { + instancio.supply(Select.all(clazz), generatorByClassName.get(clazz)); + } + return instancio; + } + + private static String getCurrentVersion() { + String version = System.getProperty("springSecurityVersion"); + String[] parts = version.split("\\."); + parts[2] = "x"; + return String.join(".", parts); + } + + private static String getPreviousVersion() { + String version = System.getProperty("springSecurityVersion"); + String[] parts = version.split("\\."); + parts[1] = String.valueOf(Integer.parseInt(parts[1]) - 1); + parts[2] = "x"; + return String.join(".", parts); + } + +} diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.access.intercept.RunAsUserToken b/config/src/test/resources/serialized/6.2.x/org.springframework.security.access.intercept.RunAsUserToken new file mode 100644 index 0000000000000000000000000000000000000000..8394c9a73882da2af97a15c33d066ec75d9efa91 GIT binary patch literal 1379 zcmb7E&rj4q82#E^TnOQpMiLKr0^`Ay$Q3UOB9JsJUj zCK?ls(Lca=^>6UtNj>`?$k~erzv%+g)nti1H0|`8?|bjfd;NF>16siishWXK6cf#D zMcQ;Bc{bxqZVY*7LE<#Qj(t59jt&I-{xAq+=~ z##9(axHfP;+$DQtmJ`vOU2E*p$jpZ@DHUrnL3lMaJGL|;hDl*yqENlaiPl&=WZ^|D zA^ZUxfR`y)?vJ{sXHacuqex_WN96>*f4F)emg7+$N}Di3+&&s34f~Eb4Wme7vI{IV zjL$Ag&XETKMs$^!8p62lVoN*}^@?R2*wVn2>gl>@%b0C5(%>{?+Wa1yx&G3w?!-q@uxzN}Zs_+6kx2ilAL$tF{%d<4j^%D#>ZDCu+u; zZ$3*546Uz)OI!8Y(t2ib4>>iJU;fFAyXj>XujbnxW zwzEdiW*VRIOjqN4!2&whtwUs|-@tpnWnjQsT<@KQ&uZh41XUqLr!7<6i?EO-@OUqnUxx PM?%Wv@d;G}Wy|spgi6*U literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.authentication.RememberMeAuthenticationToken b/config/src/test/resources/serialized/6.2.x/org.springframework.security.authentication.RememberMeAuthenticationToken new file mode 100644 index 0000000000000000000000000000000000000000..6a1c85c45613b871c8e3815758e06a0cf6813f54 GIT binary patch literal 1200 zcmb7@zi$&U6vy9P0-@0K2M8pFGPQ^ST?A{Vw3If|K~d5OsYq1L-D~RR&OU61UO-f3 zVgm_;1VZo!AXfec1}0$UKcF)U1J9SzO8~X1htt`9e*S#l`})H!9McMFQnfvuC@$LT zip97kRmam9bQL!}k9Exk3c~|txD;L;V~ks z<_>tmA_J%WO?IDEA|~3E<<=$!W;Ru@coc+cOB=-k^B;h3?=NkO#c<4p!YY&p&@uGk zl$}cw#ZenL*9Yku9#!UL6cGvOoAsd-qG3GJ_h1{GG;ydx7cH}AL%lpyPd7y@L%z;g zD?*=Z^J{$O%Eup1CtPrRC`PnmU}E4J8)Ma8K0IB1&G|Xl`F!{1g)FHPSgJyr5Y(AG zOI0b>v)R+fU#DJwVs8uJ)S#&O156X@iL+I-Uph2*V4(x4Fl)H2QqODfIEipkF<~&Y z)y|glCR>$CMmXHnhOthXO%nqn^<{ryt=U+prZl z`cPIFOM}%gRH(Dgjgsv&{ZmhCp}l<60v+$i5!wD8IPcbo>*|4ASz)>w)t)!JCjI9G zrB#?@K_I)r+>~M=O}N5v6(;gEUj`k!bT*(J`G*(s8feI#ClaPL zJ<+}>np-SE&vs9wLxc3pD`X<|kJaB1L_Fb?e2; w-6wYn6lI-v{phut-nY-Zj1#7qkpuOkw0(zK4dv9p*h3*@^5~CL14XOyH(S7)F#rGn literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.authentication.UsernamePasswordAuthenticationToken b/config/src/test/resources/serialized/6.2.x/org.springframework.security.authentication.UsernamePasswordAuthenticationToken new file mode 100644 index 0000000000000000000000000000000000000000..fc48077f888165532cf043cbc869a0b6bcd797d4 GIT binary patch literal 1118 zcmb7D&uddL9RI%8&Q4_02`V1c%LEVd3SQ@>o3#oLJJuDUf|BNCHEUiHlhn3~qc@L& zA_#(4K|Ff!fAA!p^*`9ztKYn~ympR_<(A}|@Ava7U-x0b8mKGNiL5qUc6JO&SznoM zWEt%l?uHTRxu;AzPKo16Mor6%#G*}NEfyw~x$AA!WfHO#iV(sW&QQY=|DFiz;C#GG zo|Cd5vQw_NcNukSF`V|JDc3|igFOfa25KikRB2mh2z7@b`Ss<-o~$LyArxA$G{b}? zh|KR5a^wt=T^u9pIWEc@N(h98bP-)CVUBQN$Jlg$f?e|@B3~NirFONNYB!9zbuYeO z`gZ&Cr#~UUKx6&ABkA;6`=H1VS$m$%oiT+UR#TINaTLv z@h=XvgHz*oZsyLxg15;c)>}tnrOL3VhY^^FlEooMRcgTsp;Yyxd!S@>pgDGJ!MXe_ zRPZ4KVz~FPd@?6Q16;`G`r%$RWvUXs!~HPq zH@fon=bMkCrgzN1&EwzXzF%I4(T~S}uZ9rB5Kuq8kh#8+ciA?~Px<{}^WFRX*N+O5 zT--gm)~h}jKD5IPm1<&$Qzq9Roky_Cx fG1V5cvsI6)PnwPD*1*B?OR1E8H8sRR(R=X^BCCX_ literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.authentication.jaas.JaasAuthenticationToken b/config/src/test/resources/serialized/6.2.x/org.springframework.security.authentication.jaas.JaasAuthenticationToken new file mode 100644 index 0000000000000000000000000000000000000000..d433e15704abccae09ca0cc0f736571bbac3c74c GIT binary patch literal 1205 zcmb7D&1(}u6rXHUW06)XRPmr*DtM3$c-2cj7DGmfX{}6*^;uYVBH@@Se7v z&~eta0tO-N!ZWTwFbYDeuuZ88AK+9vw7;V}T#?ZTWI#yYlIlEV>yBH6y|<`y*grn8 zdJvH_%<|a7qS665AGPToElR3d#cH$78QhAxo-qkZIE;6UZh#aZ>?owk-b{riZieY)GW_x6@0Eb$B9ddidw%5lYFcH- za^L0mhpl(-4_-fBnB?N_{93R3T=>uqHg#gCrJytVW88Xqw8InMm|cAO0R~}BBu4Uz sr3(1yOOINl#v--6)pDvWW@oz^m7msYMHMz7Xv!qflv9u&3HLoNyIk6-& zKTj_!F|kmgPgY`CqCU(( r{Q#JhwGRVJQGQNp34;(sNls#3x_)p8$RXAh1qCGxZ2o>Ok)DnK+G#n_ literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.cas.authentication.CasAssertionAuthenticationToken b/config/src/test/resources/serialized/6.2.x/org.springframework.security.cas.authentication.CasAssertionAuthenticationToken new file mode 100644 index 0000000000000000000000000000000000000000..f284fb248f7c785e861dc21b848da72c1f1a74d7 GIT binary patch literal 1454 zcma)6IcyU_6#ZU1C*&YOffS?)hal_iD9qC_MSN(#hycM@;1-d$$K@tPtc z1%d)m(NIt$5Df(q9YPccrQv7*(NIwkYA8VB|8?RcBmo!J&dmRB-n{o_9)E`hDPYVO zbGi(KvZYZZWB|g357EITlln@9Bd~rljP82C2HGNq>QR5dAb) z1I>gMwqB`Vz{H&l7I49R191(@br9BAWUgaJ&_)F}X+k4zxWJWyE_0qOGQ(xwoH3z@ zXEGF!-j?~-4y6+zyTJq9%y9V(YXshYtwh23E?4uA4mkN5yL<-7rjX~da zxkVBn)h3%O=D1i=%XKU}j}^%eW`+Kjr0p+nIG(*5#%n)vu2I$DXd< z>C_-*Lc+xv1)Vk9QVpGc;NNi7ZFGFc(z{sp|WO#3a}QJHo^10;wjq} zTuR!DG9>XEh0fT~L>MS&EZ3=;HRPldr*gic+?MmDSM#M;@|DR4?%m_h4t}{cv!X$x z39U?Fw6X<7Mt9UGet`w(a92$*kjfBKyxtg^p(I$or+BD{X%|wbYh^hBa}}K0BL4Nr zMrxhM_7%Q6n=J`Iu681TL`M4J*E7pWml~b68Hda>ZBG6jgnZXMru3WoyME2cZS(< zvIbG52UHFSBz`1*1Xl#&!l4p3gg7A73xyL14xBj9p4&q!@!o9gU8il@Jy_n^H*dc8 zz3+ST?KK#U6wC>=VntH<;mSG1I($Q@H7nw7SNXbUxh%3+SGReneV1upgw`yJszWQw zVvUDjo_vsp(K-~@c<%&@+76Uh6mdoSG#qyDD4R*HxUey??FK&PwbxnTdnUJC?MGJ} zc)(TMqjOmhY1reevUO$$EL^cqwpO{TF{DJWU0<@`bvO@s+|$L=j&sd?+EXzHZmZ4i z*Jisyaho=H$p*WTZmz@%=67Uf8!OdTq!n}Z9jN*Jnc2458pdodd$9KuzC6P^#dkp&Lvc%u|!aN(=1h`SdX&D z7k=CS>Cfzo5y;h{5czNLSfW~T8wL8sO~-a5n%ZPENG$cNCBGvBKCf7)xkqf9Sl ztDdKL6wz5_lx&3mv8Q#X z7e5bYwyS*{3w^U<+6hy`oDv;6hmt?yK-nxd(DK1x)u`$~s;X3j(M+u)bq~uq_3T4$ zH~;$g*F1m;FQ?&@r@eY1_tGi7Z-hQ?jG^Y<{p0GP&tfEacN$6a3UiGX|NQZ%>9bcx zAU_A=fneSox>~3@lyn>W*cO2o%NJfuI!)PNivCl!%AMOa%!hS5AJn`5Zu~M{JM{e1 zI3$L8x5fKjsYKi}sz)6!`|cVyEkQ+<&8J0<-RA2!YwtQ|O`N?zi3ZW+{Acb9cH+B1 z55N2B>x;L37@JSVN{AQ7K+gq|9KAg%rIGz(8PZYjV+(jG;5FkRWk+{(p0R#rLR&PU z6XxlrDK=p@b6wF5^(!K*#nQ(cqX|>#nj?@XTzWWjmt;eWJft~!+Z@jNWr@>OGbXn{ zn={)HEiyb2UR#$_&U^(UD9sRC3B6*}=?U!Y~Znks-Zv$>FZPf17Nb$ AEC2ui literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.cas.authentication.CasServiceTicketAuthenticationToken b/config/src/test/resources/serialized/6.2.x/org.springframework.security.cas.authentication.CasServiceTicketAuthenticationToken new file mode 100644 index 0000000000000000000000000000000000000000..d3e96900c7f1747ffbe780d473cc174af7e78880 GIT binary patch literal 552 zcmaKpu}%U(5QfJyXw;yIg_brJR>uQiL(rhfB^HpF*pR*50T-6rb9aElf=976F_sp- zhrMs$J2(r495HM)oB99b`~P|Wfr@v~wyq!h-07^}b7F*3>xQvMId+<6u@pWQV|v7l zv=pRm7B_`&qnl`n9W94QjncYfhnT_QMJ9qMfdlDK1-~$!;5ZqGiKrQo^=o(O043EE z*w+g|Popa<+7!6zg@e{c%r(SD>d6WDAKKU3#XM`N!w9w?pt|Bi#i-$LIk-kfJz1iT zNt;^J8pEudpK*5;lF-IK!5p@V9Js}^kSY$+_)qH3uSYq}67A{v^Yr8L_2oMPD00@{ zY>YF-biMU^Ov^=IEg4ExR~?QlVM8g0eu2mR?|GgX{8k0tsK^O+mO5J55mdsRIQCJO MkKXkp2n{>CziCXvjsO4v literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.core.authority.SimpleGrantedAuthority b/config/src/test/resources/serialized/6.2.x/org.springframework.security.core.authority.SimpleGrantedAuthority new file mode 100644 index 0000000000000000000000000000000000000000..f73bd3b7eeed961be682b71efacd99d9a41a136e GIT binary patch literal 124 zcmZ4UmVvdnh`}kpC|$3(peQphJ*_A)H?=&!C|j>MHMz7Xv!qflIlm}XFR`>FBOlBS z&de>yNp&wu%qvMvafAsofB{nu69c0U14~hUPHG8*kWW@(S)zVUVqUs_a0$qC>xzOB M1~%V-(1?Ht0RK`dL;wH) literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.core.context.SecurityContextImpl b/config/src/test/resources/serialized/6.2.x/org.springframework.security.core.context.SecurityContextImpl new file mode 100644 index 0000000000000000000000000000000000000000..b3a0dd59fc98a4603a814b617355af144704130e GIT binary patch literal 153 zcmZ4UmVvdnh`~0$C|$3(peQphJ*_A)H?=&!C|j>MHMz7Xv!qflIlm|sNaU5IR+Q)k zLq(k-e9zp190o98%3)$)^kLvjEG@}M%`3@FPAtg;s$nql0UEB4X1G4gaD9;B`i>}i ItSbr%0Ite6y8r+H literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.core.session.SessionInformation b/config/src/test/resources/serialized/6.2.x/org.springframework.security.core.session.SessionInformation new file mode 100644 index 0000000000000000000000000000000000000000..0455367e10845d2d7c48542f6ec8fb425a1cbee4 GIT binary patch literal 849 zcmb7BF>ezw6n>Wmr4>?XkwEGIQ`yi(LSiZlZBtbBpeRQMf&_AXPU_TWyY@SJQ3VPU z3lb6t35kuFf&amT#LCLnnU&|H;ldQ*#eVkZ@4fH)zMR1Y@8FJc{n%S4b-(9WE>4U) zioM{4lQ@jIae^xErO|OZ*>`o%xSSzf!FbhF4eDKJh|)?YvIH(F=CLh~3*ixAB^j{i ztXZH`&25HaBY~yRk4wuG!sW@cV!GelKNtv(0dU@PH~SZmVi6 z@G9DSjB5)3r9D{$h~E78_4#W_$XoM87GAhaAd||+9XeOi8eLdroSQ=91EX6LkzH7+ z?h?a~MAn5Xoa76Qk|{q6Z3xW{)YutT;GrRFC0PTPW}Hby(7kAx_Y^^P3@>4U>M)k3 zSjKf}BU+^AMx}hqC`F!87=FE@bCb!Q49$pdbnV^ux1UCx8X4l?=KMbu*V-nGzCHbY zy#`SN5l6T>Gin8+AZVJ^iusWfq4Up=58r<{d;Me_1tE6+-~aWy=S~f`Om3NDXl61A z3D+s2V8-Tr@~P{?IF-3o;+|s~MfSHv6*kGOJENw4BP_M|lh(6N+G>{w%ct5H`(hdr NLOtX|+wGnE<_``{A`Ack literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.core.userdetails.User b/config/src/test/resources/serialized/6.2.x/org.springframework.security.core.userdetails.User new file mode 100644 index 0000000000000000000000000000000000000000..1f66865ff446287462713602e99bc420b9999bf7 GIT binary patch literal 291 zcmYk1F-`+95JhJXd;TFn|OzfiLs46CQC!d5#SW`AnwE+ zut`Ct8vQ@|^WVo0^n-^Z>st|=SEjx5_&{sxS0a#%Uh%V#){}^Vd_#;%2XUKr_?uFf zFqp##rL@uTjWy?;Q=XbR4F9#-%2k#QWpc={LLIhG2V`)esi|QXBQI_Gswgn**Z25@ zRb-{BDe*}SI}Srg?HY!Ijj7SJ)s%Df?B|*$5j?^Rl$|RIC=%Z&=ZKsmE-)-p*7x}J g?fvWXxChX=^MHMz7Xv!qflIlm}Xue3O|C?&Nd nF*B!FFBHgDaV#y#$Op+g=jRqA7A2PC7cqbVQw|dYLq!1qM=u~7 literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.ldap.userdetails.InetOrgPerson b/config/src/test/resources/serialized/6.2.x/org.springframework.security.ldap.userdetails.InetOrgPerson new file mode 100644 index 0000000000000000000000000000000000000000..4c46fbb64c4ac7a06c80481a7798fdf0ff72aad7 GIT binary patch literal 1222 zcmb7DO>)yP6jqZaP0|5cD6oMmq#Jf!`7gE;B~D|zO}tZWH5IibBPngdf*Fp%f*WuT z_S}Oz@SG;JW!Ti7k>&UEy{GSe`tchzltd>&&bz9VjL$D6Dd??`*Ih-^g=Biw%`;MV z7mCV^YQl2W^*PmnoR6tgf}{0Q%WLQ*MxB&M%u>n~)$sq3+>qm(@cD75EASJH4l-I2 zsSC>WXi;2H`3ZeNI~W~hRB6VEW`g@XV=2*M>)X$mDs!?LL2H}v=d>tuv7+=5Nc&0@ zbbKZFHtcY15K5EW$TCTl+T^zwXPS|G`@dVj$u_=bAud?Hh1d}rb4@HZyJzKp5Ic89 zOJv*3jufJJ)L&C+NvYnzG&IwH%hVSvTicfseR$e9{+&Yuqgu)}I=JJ1p;>;6nbN@i zKCqlhR#q%;x@gbY4doB0t*Nc+g{C@&X0{Sza)*lA_#2_F0PCh+*Xf8=gv6wTiCKM*hL33c% zte_^n6q2s-*BS#Z$UAV#{kNawdmZigXjie%6w=_i-L2N8M)i^H zYSaoxhSPU@ry6x;17mDEBV!b;wYmp!&2@MaoY5e(6UUA53{uB_2&?D&8nx{pv15B; z4PYM+y>UFAgw;NDd*LuV^P{R(9Gg(fvxn!-a28ZqR9_+aX zcfc+Sn1wa(y^&|$`}l?(YoM=9k=V)zRV)pbwAN;oSmL!2Zj;CytE9GMa&jo7O_(Qc zJx+gdR#psq;yR>P(ehVlg*{Bcb4RiI9}S4cU5(*7UaC53mA@(fN2 zgPfQygtB8QQ7C_*r=2KiKuc|C`#(CN6@z`O-M#iF3$hNn>;a#!S34nlms(2VVd{cG zoGS-Mzp6x4^d>GC_e!TiYrXgU5ndqnIG9#Gk1cMhD2lwzGjFzgzsi{IV>vnh>2c7HTB%99D)VJwiFiUSna|f;QboK)(je#ow literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.ldap.userdetails.Person b/config/src/test/resources/serialized/6.2.x/org.springframework.security.ldap.userdetails.Person new file mode 100644 index 0000000000000000000000000000000000000000..d5e4fea9a91a397a7dc8f19ec4c9741d72de00b5 GIT binary patch literal 667 zcmb7>&2rN)5XZNnPSSFql+p{sD>xT!oSekzIB`PrX*W03-nyc)WF)ywdtipg;J_R3 z9^82jcn4N#JM9(C*t4_xX+Qq|pMSwK8a^mp_@>fa78jb8c%$@{Z!oJhx3|8?S>@LT zb&i&CVf<6nMoHM7hG>8nLnD(G4&u-3nssW+MJMLQevIK|jwaK*vRn~xcn=6Bi_YA- zc7*H|{2Jwi+J1qr(4bmIK18o93al=b#7SMAqu!=B8iN0uH>L%aG=Kko{-~_P)A0Li zc+Ij*)zVIs3^x_mn6KgBDHp5k%B9|Bbc51zCd_lRg_4~M%p*7|G|Mnn1(#-qCF7D- zq_pKFcJV@K+}3AK4bq0y_EM3=9F2wJXX5pg5STfN^l9XeaKk8Yaoy zLTi--qc9FEG{@mdZxI;Rv`LV+Wj#XAro&#(!d^ODCSCf*6bGwxG96F*1G=BiqhMsA u9fh;uEFAZ!e0z}2PDa6UNa5*OIvhj`BAV-dn2!1u_CH14WEw6e;p!g`z|MjI literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.client.OAuth2AuthorizedClient b/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.client.OAuth2AuthorizedClient new file mode 100644 index 0000000000000000000000000000000000000000..643502ab5fdc9bc62dd558f9fc2873dd1ebd6ba4 GIT binary patch literal 3220 zcmcIm&u<$=6rMP3Qa4E((xz3Ri4ZbUshVAW38bV^aDJ2oZCgkh5K$qT?2he;*SpK? zIB|%AavvI-J>uMf<;lEJu zx0yGkmWley_!)A@AwAS}SsY&r%W!~PbRfEYAiCX%ZtLi_8wzIEW1G`s4jIsS=UI`* zQc%f5i0Pz@si4^+an#mulhGhYAC~U&i27HcdPxSHRk}uPp9V#HL1J5AQ?FnJ!QxWA ztnqXZOj+}Z<72f5+CG}9?GT~Sbkmq0zddH%9WOw?GY;vB-7sRYB*!)Gs^q@Cz$Adq zN+jXhMg&z|`oDwOu_$UeIMUFOE>Y%Ru9y^YnIJy$a~=I_)b$p+zw?jtbsxQd5;w5CGeXD-Sv&MgL& z(BlP8S9}Kj-5z@Xhxb0-UW5eDlneiT#>6@^Nw#ml`R8zkbU38LmE=@{IJun4L2;RIRq%`VeKgR9sG&AYQtp)2|Y<>(kIY0v z)k)?&B~p;B{*C@pU+L8=3(OTvi5srN@koSg++$*zNy>e=($~}BN#%68mz$#l%pSo! zxPPu(6uge>SdyrH{B@7PJ>5!W6RD_2^J-6o;k#8}12jqhvKx8~#5R>WM{S$cXeIKQ<%Sj84~sm|LxtUF6N)E=qeE-% ze)`#8@?Q6(w&e;|e@?0WeijVpUVrZ7&eG4neXlGSUa~gGBpGhA+8BSJ{g`Y>k_+v2 zHC3fvYP6jpw4qHAfpQ6WruC$YV)20D>W2RIky+XMh{YUw?N{W$B8&g#B14WjDs z?!mMm_)1l>eLGboji+iw!;%g{H^sFYQdfylaAkyaUXrs7ifF{Gr1%h@BpI{{dlUSF zEee0j-h}xF#)qv2*Jx+W^zZp^{@y}J*sN^Rw6*!#nGc@-WMI2_276|3XK!S3>L%bg^vab>OaB0zPii{= literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.client.OAuth2AuthorizedClientId b/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.client.OAuth2AuthorizedClientId new file mode 100644 index 0000000000000000000000000000000000000000..6bdf42c805d48c9da00472dd7ccdc98db76b4470 GIT binary patch literal 171 zcmZ4UmVvdnh`~9(C|$3(peQphJ*_A)H?=&!C|j>MHMz7Xv!qflKe4nV!$>bVCo?s# zM9<$5!~+reMVVEpDb8SF&lCnQV9H@)VDe!QfhZ12P0uVYDM~EK%+K>oDPa)u$x19s z)Xz!GOVggPq-*nP=vCp7)t~_6_QM30YSz zXucc7y4HISYDL5s^Uy8i|ofg&n+jI}Z+PkYid&5Oz=5<(w zWZ)sGL(wW}DcK6G9^880^WZIelz`Y2Bz>%J;9=bpr6jcoO4l@gD_K}IjjC2j6IG4O z$H1tS9XV=Z3d4~vDss5JO6mpXQDC+zutKzBA??11b|iAAmk9p;_{ksjqkg!ox7tiT&O7mAIQ8t@&*C#Il*d~xthDoE0201BEj>DO6w`m%B<> z9v)C%3$mE3$)d#byKj!mJWu;a*T!i1T!bD#<>F|Syx=OHwk&ih+#d-x`uL59Y0BDW zd7wN`RgGalWYsNm+P0A8P)(M5@;J)pSy8CyGKt6~45&&Y5oz0f1ylz#%M}JRMU_l% zW%xYb&MDzjp}vm2DWJhlYPteI4gZm7+-G9UH@_t o&phmnFOI(&y}f?_<%@v?j(epRG$B=CnIKy2)O1sGG~BB5FFwc~L;wH) literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.client.authentication.OAuth2AuthorizationCodeAuthenticationToken b/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.client.authentication.OAuth2AuthorizationCodeAuthenticationToken new file mode 100644 index 0000000000000000000000000000000000000000..29e5e02bf3f728a0cfe6ea8550e560779f0e2341 GIT binary patch literal 5448 zcmcIoUu+ab7@ywte<>~hiin^gr2#{4fglFTS&vdm^=NBL1sk+(cc<;rz1?MYj$R=p znCPn}CK!nE$!Lu6$!Ih@VN4{32SqUwqlqs@AM}9-;)6#0zM0*dy>?sH1bEmhvoqiP z=J)-+KeHeFL27(POqWe%e2-bq)Fjgjbk=1v8J`+OX7RaigmaCkOHXKwAJn3jt^n zfM&RiYQcVLbyuFO)lJhvG`c;cBYsYq&q+)Elzv9nirlibqq+wZ*CF^a&fbzStvgec zlfmTsQ^)jN%i$rAID@d$YRT3xow9t+1TCE8lWik-)>vez)+5HE)?kknj7~D@PX{Ds zlUY|J4o8-El^E$;Rs~3%@@OVEf#))KjHADOf7^Md&s>=z=`qqASw~HDykv}96kOC6 zaZ!(J+tffe!rAIf%5}?zDXZla8$6{APMm@nT_vvyMB9Ph&7gNPYN_8o>J(hlnzZx@ zo92Q1zgxEM`uO)(TT`SePpWMg;iNUPEzZHy@3^};watcu>rYxp;baK&{BEQ%xJ;oG-sM1l?8N;aEy3hyTONdKzzT6U{;kpPHN>k9(e~C_b-bv zOcWroFfXV${qD<^ncLY(iK^B&Tn_~hjnNUx5evs;acs_mxIFxSC7o0IwTrMoJLug5 ziGhd0mWf6fQG})eA9&9KE_0xxHBv|1Dp0N8@wx8c3F!tZo-+ zKrb-aEQEq9Gb5B;eE#Jt8@C+!a0TeWn{7_vj`Z@$uhKUkyHxUV)y8o2Qqy4i=JuaU z;2Fp5lstmHtx9-Grj^kE{9f4f`i*2Q*|1N>GqltlsIX)C|T#lDJ1VOeoNNTeF4b#&_ z&^9Ln$>kev8CO;Ud!Ve!`ZY{_&vpEJSHD7okYIr?1b_FY0AoD_AIDb!UeVRKM7>6l zL%wR%Ib@}YBBw(3Fw#~*ZXbgnli4AcoLR5eCTND2m5Q=mFa_eiiK$-#zn#%n09ieE(q0i37?Nqj| zT40lEQLexwC)?xJ#-fCxQHH|FzPNRX_5@!%lh_xbp5xPl((`iOsYXJDejY}FZsCF0 z?^#|CbDsiH4ecWC8l-|6%9zVI*_%9&WdZEPbr7pDIiez9q16q!7x#ruab!mJBqlnt zpE?G#EKNY2!7LAZ>)iJSfGRtGJ3BrI6bp3VM?}MuLbl1AbbV+Z*Mk z18}bt1i{5ij*L))QPJeB%99q4xo0d$f2hs~)`*ga zN7x4r>`CN6tnN#br98Jdovx7_jl(4#NE)BeeM?-EvYa$Yi;p0qoHWacopK@|8%u;N zk+c@lrU2J1UE9|gt}|&(73HlR)TNs`*O519MjAwK&s3RjI5j&1U9uXe<2!l(FNNzx1ixLL-Omy?=Q%9Izx|8_{ zLPlF6vq)*|LOurbq?~b~uSZp2IKZV+HoxU;BRa8cA}TOg<91euTO6jf(^Q9~g^(c6 zKNPx1_pD5`vfbLazS-ls#*8 literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.client.authentication.OAuth2LoginAuthenticationToken b/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.client.authentication.OAuth2LoginAuthenticationToken new file mode 100644 index 0000000000000000000000000000000000000000..b60916dc318ecd1afb70ff1f8016dc9eedb23628 GIT binary patch literal 5541 zcmcIoTWB0r7(TgQ+BE6iUKL48m3F7qT58kKZqv=Jlcc$)OEperPO{U?&P>moZMH2f z73`~mP(efxL=f>w6ic5ff<^jZt9U{5MG$?kNQEL|QUCv(nau2FnvT%!!)7z*{Fn3n z-+wvt{w-4DF*4z>nUv=;)1H}TTAt21Y&PXly}(Rrmk_* zu~P$STvVMI)5c%n%7`;dZ6ZFERwb!X$r4T1spp9WPWG!{R4Fs61V$BURM8zq6=@?K zO1G(GHTvN&^NesKQ`B>sJwrJeNUoOJhU=I%5A??=1WPOA!H4LK>2W5^aiS(OBOp^) zL{#Yz&!XDEMgwB6o33VYvM-rx1g79o=6gR1KS9w_MyDC|az4oI$#qGPha%!_MMk<7 zWkwkn(o+bK&SQx1)qC5{+g--8N>Y_2O%XY2ATcEL+@u~SYt$3kDNQMG(^5Jd%c43G z4bE0)P_CI4Y*`_7gGwTkK3)i3jbF)xdp`Rq@NnOzer&fkq(u`@R zQG4;lFE_n@O?$J7RP>N)&pbon0PvZs#_u8uH-l*RqVUhrsq%Cjr&FcqAC{P*Rzffl zD^=3OXx`y8Z5Tk6GB}4hRsp1>2WtR)kAcoCFS?x6N;w``10VM->SItmfUbV6h~)9t zpD#<@Zl9K3)q1+)A_1Bskr<{Nec@P4Mozns;GO@M(h+;DA}vr4Mt6T=#{*)^91%)F zK&!w%h@J^prh!K*rT5&-Q>DlDxMt%C>P^opP$SI|%ylYh6ek+ftOE7n1tgmUQBX29 zOxdO9Ub?d3@$L_n0w3JDrb@K<)~dD@>;L-Va?wMn4gS;Ajm_U|TxU-gAu=OlgGaiv z>CrUkTOJaxTk~>&<(0!1FTHm8Mo=g8oZp@A&??CtOG&18m#VRd*UJASwbMh+)NaX}dm!y#M{^n`@0ITe8gj?_EW z+c|!;vu6;j^(D3zRQG^&an(IE3t6$suR^k;4AGMXAR{OJ$@vzTjB6;qKA=Kr=Nh7( z>)76d>s*0CsEB|UI)DGpj>#D~ABUIkdQV$7)`sG$Y0pvv%K`}OzS@7h#k%@82xNmXZGah+L6s~kBCxxr?)y(Z zUGu`tDpJ`=8ZAdNI-%)1tOx3J4lv3&mQi&5xi(xhpWJ=tLzpo5VEiAf#L5_Cp3!-dsmMF~G9bq9tH@^+4M*W0Hkw5a7>i>7oZ zuUI(q$~jdDgy?~QBaWqrnak)yGUFMuJp*s7sJtxPL`IG22+IqB9dpxO@MUkFwn$hM}bnyu75WtQ^0mK>P z-e851TUfGJN{lAq-2s3!Ii-1~xP7HLSt2z)hKO>~BscDm8^N<|BF_?0s~on_;ktVd z9jkT6o;GI+@~r}}OEWaCA#N}wHHa$%3+Io96LYgrqQVEYJZE~XJ8?fGV7<6fgsUz1 zcA&?eb~65Z4o>n9ktePA1|n(>22k|upx^WtFTF5U9NV+%V)ln$Zuq5lWlUG%WOK~Z zpeq7AXmFg9?Qy$GI-z)%G${}R9?U*G9xQ+*BnH%eapzcAUk)UT6QqoCkIEvcu?z7S zQ^|bYh1&Twv=F;azZV-|+k1TYLNd axLbOgx0Ws6sr~=QohF`{W_%bxFUi%yLh0Xw?QHC6|QH)fEm* z1RBWQV)G^R(k$iFj+>=?^k!#w9BZfIzEIqQiW03Ec4xax`>kr9_GH9ypaJ{37(_s4 zIb2wY&==!{e1R%C`6{Jm=yA!`B^Jb%rIiTjWLaUWp7c2)P8LSAJmkstH`F1kP8F?& z@>J)U79NnYt)3Jp^G@6NsF4)NuGWdYj|0vX8nDo+bnBMRz0D|zCC=0D)uF_A-i^~m^HZAl)UFgwMK-_=mMzb^^8$3*L24l_Dbhsd= zLO+rs1R%|Sh}g~JXr&7d%?#vt9U#)@Ddj7y83o+&WRnK6CPEuGv`x6N;W4x7j#&n0 zQU(Do5~iIVt%ObKiv_{v1CAtrfAR7c{MdH6M9|(nO|w#alD!$p|9q+$!76@t=iKn4 zxzAtUmk2SF4dqM*WF)8B4n`Exfb{_x%e&R_D$nCuR})3>VU7Q1-%Yfqe%|7eVMFic zoE|UcgZ3XmcLOw=HSuY~2g3Bme*$lxah=)X3Ba_TkAeS5=|rT9g{WwUTQ_q0xXsbl zSLY1F-i$O1+>bmDj$caH?!ll|$n1GT+{$n5 CYZ@#7 literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.client.registration.ClientRegistration$Builder b/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.client.registration.ClientRegistration$Builder new file mode 100644 index 0000000000000000000000000000000000000000..f94ea4b7a67713a44f31c73ff18d7c9b9bc5b606 GIT binary patch literal 1609 zcma)*u}>616vl@$5D`=q!Dx_JV4=aC#25>RK|rD;iv@Uv6kdkexx3-^cGj7w_tBaD;Y>Tu)HzeGw4n2a60<%T=@KtvWOCl$WLu1eEUM8pux;VF z%dP>dgMCPzW?2y!EC909dl1)ikqnxgbSBHeGxCCzd~(YDe}qGASB70>O>ixsT^r*n zs>)j8riz(Zz<>cc>-tDQhIEC+s6Qx;Nrc8O+gArSw;O8$vcixSfz*QMN@wzKb`)*E za1{&F?SfLa3s4OaWttO-5qdeQs-mue%=JFJA^|iU>KJ66W42`HHV^oM8wrS`A+};< zcCII8ksQx@{taISXrE8|w^*3C7iz`G56fSva1|h{*XsbWnW0p)SThcV$5oStswN}H zDeYVmm~OG>bpOWbxP+sQq6)4GVpQ2+Msgs7u6k1<(L+x7s+}5;)9o+rJO-S!8{%2A zyhRm;$P4bXnObVbu!E>QxpU!Q{o9XEB|_{#MhkieGFedV>?~plgzjQ6QP$xe-DRo6 zUgx`=Dc$V`a}Qa}SFjIEdaXEVIclmvRwdgA1yZ|z<<;kxZ}!VJuqM<0zms)+X@Ts2 zeEMs$M396&9OHOy?XqLDDRvh#WnV@O5j1u+m6iLOJBGT-%Se^%vj)CK&FeP+Qk{?!k9|Bqd1?tJ)>5%e8)jHP{&w8 T1DWVVVzKn{_}j=pN;3EjZoD+9 literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.core.AuthenticationMethod b/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.core.AuthenticationMethod new file mode 100644 index 0000000000000000000000000000000000000000..34f5fda9c0baca53db6b4ebce45249df813ad701 GIT binary patch literal 118 zcmZ4UmVvdnh`~0$C|$3(peQphJ*_A)H?=&!C|j>MHMz7Xv!qflKe4nV!$>bVzbIAD z5y(uVPOEtG$)b( literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.core.AuthorizationGrantType b/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.core.AuthorizationGrantType new file mode 100644 index 0000000000000000000000000000000000000000..f0102462ab8b65e7a5dcdfcef8ddd2dc2fcee4f7 GIT binary patch literal 121 zcmZ4UmVvdnh`~O;C|$3(peQphJ*_A)H?=&!C|j>MHMz7Xv!qflKe4nV!$>bVzbIAD z5y;Fh%B)H($;{7lFG|cS38^edWdH-F93}=v9|qR4#GKO95(Xikti-ZJ{hY+Sbp7BG RklEH11tkouVNLjcft^^59Vp!Aq)fxZ;d$ R#1z_-{r;QhWKi#p`!BufDUSdE literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.core.OAuth2AccessToken$TokenType b/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.core.OAuth2AccessToken$TokenType new file mode 100644 index 0000000000000000000000000000000000000000..1767bc4b68bfde7e98b7235688ff57c6b638b0f7 GIT binary patch literal 124 zcmZ4UmVvdnh`}YlC|$3(peQphJ*_A)H?=&!C|j>MHMz7Xv!qflKe4nV!$>bVzbIAD z-x0)iOioTME)L1hPR&yRlOdG_sSIGil*7cp=)=HTmY7qTTEZaYla*MOsGpOVm#!aN Q0_-MRL&>4|!^-l6oY&gPuY7olg& ziA&`hc6E7VbF~lRi}E&a*~v?hY2`FiIk8povhy`FF?xp85P`;|us&zkh@)CC)n{`z tQDy2fN~PN_G{&~8R#ey<-WX^E|9!8|Mi9o?CfN%{X`F5KK@g<7*xcWbM@IXA67~kw}*|u3p6X{{P-I@2kZ@%}v*Uvv7>nm86s+{vZ zCEW6+VpYB?)mF~uR!s@q%Sl$l%I%yb70+?k_M~tzw>qO=>P0H?nxT+xp>9=}Tjmga z(oP!ECS1|MCr8%!c8&XpuwoLV(FSQWAdL{x(2zz0(nx@e@=cjA*oNbK()BsQ>RADW z38(5F>7{f2zg`jfSgt-Tmu(9zCUYJ!T?*vNN4RLdVmr*Jp>T|4=Fxro7@`szHRS#_ zyn(C0E-AdY+^pxZ#%M5%VJ111^Wu9ICvrPL$j-9Uo{pPUkeo zZWDSeM{pMx?dW&E;^6Qi#Y!P;yBW-1UWXJ=4 zL9MTA<#Ss3+?;eA;!4%=$BJ%M+G10%4Tn=jet!J)2amgF(~vSDRSilKgb&Bzrf|2o z{ebxu3Ya`tc|PDA{HB0s(9bN3`~Ir3xvDF;6vsrTv)$jnej9pul!5d-^f{8*^UOl2 z7NHj_Bv?f{cHNu4A9`uGhrS2&a~%SA^atyOXg?L~r)fJy0w`Vkq%mXalHGVO;7qUYZ;3|?nd&*3zFs)i%W!VQOm z(Fo$x4a1a>?4H-*Rb- zON8DNDhPLz;yS{lT0HK!7LATbn$~MgZFX99y0oB#+Cd*s1MQEzJ9_(mzew&PBj1XR z{IA}L-(Q`D{lgc(M#C1e5QdtDUVJQ^z@y2T3sn#Ih{oWt8u^kryrF4$81*z=;%xrt z8q&qGb(s+86pghkS4t{`JDm@&@XxKF<7fya%*B?u)ZR1`QIRG)wnh_Pe2oktQ?V^2 uJU!*2+w=yvnIjuSFEZ3M!DFE9(&EDMEJCKRG($=kix17Gdh?oI#{L5Av+L^s literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest b/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest new file mode 100644 index 0000000000000000000000000000000000000000..029e2eb8cea1165d244555675bb26a8387cd2f38 GIT binary patch literal 1469 zcma)6J#P~+77YRAf)K$yyNRiDzS?ivlmX=* zAh9wcBnC!)KoMi7uKWiEhKd0R@%k>8YpMe!gLCKi!;hc$dG7NMQnrTp+B7{I85uS= z3~P%WZ8kkCf{u}}>uJ`3)^#t?MtCCRk(MEND+_MZE!xP}45SX9h^>yWK;mCf70HB8 z&N0rV3o`YHxz->IrkwU)v28{>AQgSUqB);TFaRUhJ0R>9c|!_5sk&na&F>i&!qeSI z09kNw=`px8g-a8-)WM}g_y#TTxapzhedKF+U2-;ordZgds|YD1X>TlM8Zi4>Q}gwl*Ju>iDL zCgadT!dhDKZZv;8(bCQs{!h8*E{WAqiP!Odyb#BW7%m_IMl_`b6DzVI`LUgAl4B1; z=0{e1zJweYLY&BvpYk?Sos?o!(2!Uff#xXM4=sSm-l9}=Svyh!?bN19H)WUzmZn8w zJ{3#@Q0{eCUQ1+#*QqB@c#T>-*Lu9xQrR`ovGu%@2Hi7za6yl9g)MWcwEu tNpJtfui3;x0g&pEk6xBG7u#w!zw_O81iJ|1{GploQrf@lU_{XO^j{Y_0mJ|R literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationResponse b/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationResponse new file mode 100644 index 0000000000000000000000000000000000000000..3984149368b3bd14a659751a19beee79f3ba5d79 GIT binary patch literal 464 zcma)&%}N6?6h>oz!0OKTXaXXFx{^AK)zpgZ2rk3SbsC)}@#a>m3!lhW^Bqj4(^g!W zMMwg<=R4omH|u(2Ba0>X4z(#CQO)7a;xqS+E4Dr?)Awo=ivC#qeev&bx!lY?@r939*wIk@KfQz*5a! a1)=h}SPQ_mhXMpbsXbxcdtVpSc>e&@o|_2( literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationResponseType b/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationResponseType new file mode 100644 index 0000000000000000000000000000000000000000..baf677ce60a457e0fc8cc918ebc5c28f306fca07 GIT binary patch literal 137 zcmW-aI}XAy3_wj$FTg=kiIs^x62D%+DkcPq9XU>+oQbP(2Nd4$hPS-W7uu|F5DhLT zjT|nD4|gJr+>KZ|fLFaQ7m literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.core.oidc.OidcUserInfo b/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.core.oidc.OidcUserInfo new file mode 100644 index 0000000000000000000000000000000000000000..be89d912a67f9ce6228c166d0c1cdfa18daf42b6 GIT binary patch literal 328 zcmYL_ze)o^5XR?D&iJR$H2MPCZa}QGFen5Ar>WA2h2!2_Zq4rPIlD2J#Tgv2o%Ssn>ju_{M7qoJwgv2Y|Oto%$^ocQ8ENXsOw z%A^>CGIYfKGPlq~tYe5$Sd|);aUQnPJAA;-#4Fvo!0NcJ!j}C-Pb_-k%xX>2D_gp~ zVQFlpa)q~=g7@p``PYB9PMd*|xraxH8hm$&r>Y!Nc8;zHz~TJzdRxzb0&oSJC?z>J z;EcFtXfK(6chdTJecQQtUxBy>8`@&lL+LH|Vci!@uCO|*tCMbXRy17;8i$NLBxF!& R5A8;~RHLahg}0a*{s0qwYyAKK literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.core.user.DefaultOAuth2User b/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.core.user.DefaultOAuth2User new file mode 100644 index 0000000000000000000000000000000000000000..74ff72320bf3b343a9905d8876c77d20e4c5b7dc GIT binary patch literal 934 zcmb7Dzi-n(6n?fFrA?3s3Dq>{n1VZ9ZU|>KDNQie%ilGz)mV9Tuckg@O`|k6zk5JMI7NzRCI#E&F z?I_mg1F5!L&4W}$ICLdTu{Y-iQgJucT)E4I#QV1SkBx8NL9rtAzbt1MYIQ9JW<&W^%eze*fzA?5$k~>{X};$--3@pi~!O278L@ zo)lr0ES}FLvIf(%+w@up(?(1)Ey9%f%;4We1H4Vi|6wW<&(i7nzuGl zz@Zr%|7W+tXU1^GI>TH{Fov^#Fz>% literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.core.user.OAuth2UserAuthority b/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.core.user.OAuth2UserAuthority new file mode 100644 index 0000000000000000000000000000000000000000..74be373908fb1a56163b9bbe087c694c224e5e89 GIT binary patch literal 376 zcmYL_%}N7749ByprC$d>4*CLmokH=}gI2LrSS?uhB7#nLr@LdPGwV#YT`#_k;K7He z_yk^k2M-=R3F6EuG!XJ9$uA^%{(y?n&{aAiCevIdV@;=QuJnW$7Ui1bJyA5rv`r$V z8OaUPWYBeq&`KwiYl6~z;e#JQgCc4^%8?m_wcwV{Xe&o9TBkJY1WX?8+6RWToPIugtd`+R)*!LRC}4_*M?^bQ`tEAj0m z9&kBfai5yh0(*IR5Oz*5f|D1L3z73ui5BZ_Yi9CPttx8Vb#e35SoK-c+qcPhr{FZU&48OXaE2J literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.server.resource.BearerTokenAuthenticationToken b/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.server.resource.BearerTokenAuthenticationToken new file mode 100644 index 0000000000000000000000000000000000000000..62d9f91556fcee26b4f52665f7fbb6b8e0f9e45f GIT binary patch literal 781 zcmbVKPfrt35T7oKgh-W0V!{DWU_6-D=(VR75^S=GiAqQ~ki6ZU)(6{t>%3{ZcxdDc zaQEOBAYA4QDQyd@2ovq>}?n@>tGIYAZxlmz;J1ib8w z^`G@>5zMo9#qcCL&_mtGblz*cXFpz3%xvFj<}cM&?3i@Iw~Tmk`eK}Kr;h@d+k<)q zhiL>4{oP7_1|7rGsgVJjtg&gc3=V$pE*h*7bQ0KLzxaj0vC_3q+P! literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.server.resource.authentication.BearerTokenAuthentication b/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.server.resource.authentication.BearerTokenAuthentication new file mode 100644 index 0000000000000000000000000000000000000000..bfed535d8ed352616221ac5d861b2d5a8649d2c8 GIT binary patch literal 3022 zcmb_eU2GIp6u#SSw||sYL5yIDF_iECGo|IHP>gJUSzXvdTa1N@cW3T)r=6WU-nrAA zsv$M;!Nf!o6OBcA(}Wm&G5Vkn2IGS?NXwwo;*QqGs9<7@&oC#w z6*eJl(}n?_72&RavsSzDL;)lXQKUSByUXP~%9Li5M8@V^0Bh)eWfD7Yi#iqkAdwEN zI`FDyV!Dd}1PM0+Q7phN4U}CMQdU|ere_>aLis@!4VLHmKm&K@q@YfM>JW|9`;Q_w$?QdQ=^X~jO9H4mC1Uon1edl1wm2fT2vJZ*-E0gRU|u*C;Ha6^9JPGJSdJ9jbHgU3g)wB}YcY*5bEMj!>kiW& zF0B7-QZ_sN5*`fJJ!@V^cI8YM|m-voR%MlMyO z_O{&a*Vo=Z@WtiVQi~AA36h|oy%VAM;uAM;edzY#0}UT&l@|Na;_;uZx4$&3NDN0N zB-vV&()IT1x+|a`8ql{j7Eo;Cn!}`C{bYgIJU=hV`ib4SZr>g0@98-z($hg_rwLPp zB%ORAuFurfqkm&g1oT-KiW3pr>7(5R>q!ZdfKd}3mtk}O!|F|LyG5WaNkZcQ6xJvd zAP8;zSoZCXy?Zv^`cWiFeTFm?0qA~iG8kDd7ZSP=tqvPiSEzBpvcnp~b&-3j2|OKww zjyjhg6Z2Q!`}0>Q)I>$v@M!?aLEnrcMaCA+AE_YKXxJ8f7M-#HmNvVqyJxz)tK0N; zbah+PyCiAwAui-DU^i`Y7IwrYg( G0r?L;-T6oW literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.server.resource.authentication.BearerTokenAuthenticationToken b/config/src/test/resources/serialized/6.2.x/org.springframework.security.oauth2.server.resource.authentication.BearerTokenAuthenticationToken new file mode 100644 index 0000000000000000000000000000000000000000..1e0c8c6a082eb5e8415cbe249a7832adc63382a7 GIT binary patch literal 684 zcmah{Jxc>Y5S@G}68u0xu+U1yLM~{VDp81m0}BOYjB4Lr(h#I8ALb$FLWyk_!?fELXQC2{ zs8!ivt6ohA8h;k^L$&5y`LYykKT9pHwT_sRsj3uc^AeBJBqOu1ZIA; b)iQH1rp?(H-3-z|(q$MKvXC|IGKAdGd{ODE5=o5OOEWjC@J zDqtwbC25gH!Mp%i#&Ixn8Xjh-PGTE@k2wl&A`XF67v@35H^g*gTTI1F&*nh|cktfo zO#4!LC`oYJYTKpUL&cgZ6gx{pB~^}5hY5|P32hwsmpzpKM#;m99F)0Yr0Q54a-^97 zAZ>+xfqTpx^CeJUrLdMu88IgVig$}e>U9VwsT;AP5=gpH8>cFb2_}}WF1_5dfAm>{ zvMJw~Bw_d3&*gZ%|IXX>Sd(bO(e>M(o7V{ifsEYKkO>Nxd6TXBf|SAjU`?~sL z86oI`?9nfk;t%%+UcI|jy@p6GlLSTKFIU`5#p54`ktlsI)RkovudJtQlV85>y*Z-K z0B)H8(wzec<#E%*tvU1Yj$|?QLYEns6GVg_D}CCr$*J~nmugDPT34x5yDT;p&H`73 z2XVHaomNd%D5ETp7B8^pdI3*(FZR`q6%%c3r+)4(N|VsiAXbGlMO}nbD?;=4FMbdy?VO^hbLgR6;X0P+Q;vS>Is%)!rci1+~8_|$M AfB*mh literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.saml2.core.Saml2Error b/config/src/test/resources/serialized/6.2.x/org.springframework.security.saml2.core.Saml2Error new file mode 100644 index 0000000000000000000000000000000000000000..2a20f99e8b6535169b0cf76d8e62fb9387553c48 GIT binary patch literal 142 zcmZ4UmVvdnh`}hoC|$3(peQphJ*_A)H?=&!C|j>MHMz7Xv!qh5I59WJNH00RC{-^Q z#B?nx$}eI71Ew4%1|}Z{?v&KxV4kyD$aTJKCsS^P)lq-ZOF--0TDAb~Mc?Umx9 sU=mT7Bxk%~RG}-QjegIj35=w7eR5S?;R%C#qcEJsyR|~NP4|n#2Z2O3Z~y=R literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken b/config/src/test/resources/serialized/6.2.x/org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken new file mode 100644 index 0000000000000000000000000000000000000000..cf2c149e825fef4417e62ed8e77be5c567df786d GIT binary patch literal 1231 zcmb7@zi!k(5XQ%M7mh&wfKx!HaX6%3+hz{Yx@{VU`f8Wfv@AhH98d%e2!?%f%YGd7q zE^ceH>~Qt;(dUU*AH>M8S z)qFe!2AOWyU{^bAMv+0AO>T&6X6c(|x)AZC2Wir)SX| z_``40cR^8Kg>eyvx~JR?t>)51Qq@%$D`J5Tw>WgBbVJIibyV!6znnT+vQP{80v%6; zwRD4XVYFr}MYsAus7DX!nJOGo`0221sovhivrkW7@3kuc*_7(EbG+EOVh}0o>&vC* zFZLg=RVj+HQvaxI?o!q;oH`hJptMdN{*vmT#wvdTeki7+ literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.web.authentication.preauth.PreAuthenticatedGrantedAuthoritiesWebAuthenticationDetails b/config/src/test/resources/serialized/6.2.x/org.springframework.security.web.authentication.preauth.PreAuthenticatedGrantedAuthoritiesWebAuthenticationDetails new file mode 100644 index 0000000000000000000000000000000000000000..ff35693be148f2fd798a269c0dc0846379fd34f2 GIT binary patch literal 385 zcmb7=K~4iP3`N~(K`ICd!I~>%4$#%82wI55h(bZ^(#8ydX)-t-X37GIW3b=`+=D&$ z;0`2!1UrNmUfBNr&whD_6;D8p3gIgzjkBU6 zj1`d+W~Ae8)gS--liRAM0CqfNonctR9`p!#rnL w8=efO=LZ*~bVP@G4#B-$F_>6H@%qK4=RR({Qv*} literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.web.authentication.switchuser.SwitchUserGrantedAuthority b/config/src/test/resources/serialized/6.2.x/org.springframework.security.web.authentication.switchuser.SwitchUserGrantedAuthority new file mode 100644 index 0000000000000000000000000000000000000000..b2ac7b88faec44e57c2fbb9516f78021188d4ad3 GIT binary patch literal 203 zcmZ9GIS#@w5Jg8}IRFQ-CE8R}Y1~CAQW`TPhTw_DV*+>LYTN-Q5<=ovPx`aG*BdsG zp&{;69NCBN%=U&8@l{21iM>44ghyqQ^cciDE1rUilNZ;gh^*=bn~W9PAb2|DQJNQF zNih^q7+5n6D6lgZd$)S9q0_a@4@(2vNQqr;_a=+zKN0;E(T*7PeEw%rK1P96)wJUW Dg?LEN literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.web.savedrequest.DefaultSavedRequest b/config/src/test/resources/serialized/6.2.x/org.springframework.security.web.savedrequest.DefaultSavedRequest new file mode 100644 index 0000000000000000000000000000000000000000..72cdfcfb1b7975258b0a884f783ca547958cf185 GIT binary patch literal 1784 zcmb7E&5zqe6rbk9@n%8oQi=qksE1z3az!f@>`eSQw#SaYxpYXpo6saqZD%(NQYHS3 zN^s!{{1J!)XDV^wA3#WOhZDSUoNT3@YAKHA&HMf4z2AHDe)t=8%K}MxaWN>@#e8*f zUa)0$l^0J2Wj5Iq^XhtVm3=-a*=05@vZtG@tOhtcXPZSe<~DC*y`eRT=4_X2W0tXLR)ELtmpm-C=6j2L!WLQi6g@*Ng5F=UYBB@jCNj!+MpahW@W*{_5hQ?N zmQR~if4z69Iobq?YY0|fo#&0mG2~rb@8aEq8ZiP-f5k!?i%?Ex+2PPem6yUe<~l91 zTACWNT_belRH*GFE|ldi*J{AU7#zgde*NP9^IzDvZFEaVopSzV#z9E9>hL#!K7PGg z)$O~Ft7@O-G+(m$s#$ebH#&E?j*Y#0 z$rhVk0eHj@e!GRx2V#YUk%lEatdM9+uI5vmR;XvVUf_f#D3O>+g^t41rm{l)u&$7Z z(A~EI{@`7JTY>He7Qh`G8BSm;;2zUBQbL((KxG=9Z8fQ(Lk3B*GbJ{_s0U)0F~v+g=QWZej!!{LN7mT0<2_un<5E z;?h0vVFyk>hJf3?1Lufg5ZV!r;S@1UBZt};auBU(sF4vK!6%`qq1&myg$_BnX)BGD zGq^?F-tRyC{LbTF+o+|W{vu~ng-xow(9uyfE3$HyFQ(h|C!f|G^2QbDkM6*)1wk6V z?FQHhm0f8BFt_VoY(pkAOjI7Era(~zk2to5x1c2rWG#`bIvbAY)QArFSe8Gc9zbz| zB^^qsII@$Zjw6FjB9f_Zw+C3OhP5E2J2xqjdKx_Y=j8D>AN~7R8wolRXOQM3pJsLI zZdO%s-85w%22-};U0svHXb|~m+OUhms3<4Je7$e=-X$yMtm*vi`agIo)bb%a1Zgf= z&GLwoKiY+P*0_wuwGo_HS(7zRphi2gxJGnr)aVaikr{O9rK*8t&D_9H_^h6Q10Ls~ z8KFPE2>#7DHjnU_+uti&4Y67+j-IE)EN%mW{sEd)dA$GqfY z-Bqvwyd%#zc)*FBSn~la#MIJs=+9oDdbX_aFLQ_!lfY)z9LFY*^i$7`C1Rwh1Zs7i z&`Duh92t`CSe8138zU%z97OQZC5lEQfCNLV1rCudNLiq&5i4+)`;P0UGENlB`yVa~ B>&E~9 literal 0 HcmV?d00001 diff --git a/config/src/test/resources/serialized/6.2.x/org.springframework.security.web.savedrequest.SavedCookie b/config/src/test/resources/serialized/6.2.x/org.springframework.security.web.savedrequest.SavedCookie new file mode 100644 index 0000000000000000000000000000000000000000..2e07a50608c7c9a8939d0eb94f220690334c2064 GIT binary patch literal 249 zcmXwzK~BRk6hwb3np7-VaSC^hSed9r5iUeHh{EpEeu8Oir}j@;Ha!tX;VRsLw7{(1 zXf&Gn{Dx5saN$EGViSz3UISX%`mh#}mTfTnA-41)B6hS2v}q}_&|TT6}^&eS`0IH}Q96U~RsO9jcwTQqJ1dl)D