1616
1717package org .springframework .security ;
1818
19+ import java .io .ByteArrayInputStream ;
20+ import java .io .ByteArrayOutputStream ;
1921import java .io .File ;
2022import java .io .FileInputStream ;
2123import java .io .FileOutputStream ;
3638import java .util .Collection ;
3739import java .util .Date ;
3840import java .util .HashMap ;
41+ import java .util .HashSet ;
3942import java .util .List ;
4043import java .util .Locale ;
4144import java .util .Map ;
4245import java .util .Set ;
46+ import java .util .UUID ;
47+ import java .util .function .Supplier ;
4348import java .util .stream .Stream ;
4449
4550import jakarta .servlet .http .Cookie ;
51+ import org .apache .commons .lang3 .ObjectUtils ;
4652import org .apereo .cas .client .validation .AssertionImpl ;
4753import org .instancio .Instancio ;
4854import org .instancio .InstancioApi ;
6369import org .springframework .security .access .AccessDeniedException ;
6470import org .springframework .security .access .AuthorizationServiceException ;
6571import org .springframework .security .access .SecurityConfig ;
72+ import org .springframework .security .access .hierarchicalroles .CycleInRoleHierarchyException ;
6673import org .springframework .security .access .intercept .RunAsUserToken ;
6774import org .springframework .security .authentication .AbstractAuthenticationToken ;
6875import org .springframework .security .authentication .AccountExpiredException ;
94101import org .springframework .security .authentication .jaas .JaasAuthenticationToken ;
95102import org .springframework .security .authentication .jaas .event .JaasAuthenticationFailedEvent ;
96103import org .springframework .security .authentication .jaas .event .JaasAuthenticationSuccessEvent ;
104+ import org .springframework .security .authentication .ott .DefaultOneTimeToken ;
97105import org .springframework .security .authentication .ott .InvalidOneTimeTokenException ;
98106import org .springframework .security .authentication .ott .OneTimeTokenAuthenticationToken ;
99107import org .springframework .security .authentication .password .CompromisedPasswordException ;
100108import org .springframework .security .authorization .AuthorityAuthorizationDecision ;
101109import org .springframework .security .authorization .AuthorizationDecision ;
102110import org .springframework .security .authorization .AuthorizationDeniedException ;
111+ import org .springframework .security .authorization .event .AuthorizationEvent ;
112+ import org .springframework .security .authorization .event .AuthorizationGrantedEvent ;
103113import org .springframework .security .cas .authentication .CasAssertionAuthenticationToken ;
104114import org .springframework .security .cas .authentication .CasAuthenticationToken ;
105115import org .springframework .security .cas .authentication .CasServiceTicketAuthenticationToken ;
116+ import org .springframework .security .config .annotation .AlreadyBuiltException ;
106117import org .springframework .security .core .Authentication ;
107118import org .springframework .security .core .GrantedAuthority ;
108119import org .springframework .security .core .SpringSecurityCoreVersion ;
128139import org .springframework .security .oauth2 .client .authentication .OAuth2LoginAuthenticationToken ;
129140import org .springframework .security .oauth2 .client .authentication .TestOAuth2AuthenticationTokens ;
130141import org .springframework .security .oauth2 .client .authentication .TestOAuth2AuthorizationCodeAuthenticationTokens ;
142+ import org .springframework .security .oauth2 .client .event .OAuth2AuthorizedClientRefreshedEvent ;
143+ import org .springframework .security .oauth2 .client .oidc .authentication .event .OidcUserRefreshedEvent ;
131144import org .springframework .security .oauth2 .client .oidc .authentication .logout .OidcLogoutToken ;
132145import org .springframework .security .oauth2 .client .oidc .authentication .logout .TestOidcLogoutTokens ;
133146import org .springframework .security .oauth2 .client .oidc .session .OidcSessionInformation ;
134147import org .springframework .security .oauth2 .client .oidc .session .TestOidcSessionInformations ;
135148import org .springframework .security .oauth2 .client .registration .ClientRegistration ;
149+ import org .springframework .security .oauth2 .client .registration .ClientRegistration .ClientSettings ;
136150import org .springframework .security .oauth2 .client .registration .TestClientRegistrations ;
137151import org .springframework .security .oauth2 .core .DefaultOAuth2AuthenticatedPrincipal ;
138152import org .springframework .security .oauth2 .core .OAuth2AccessToken ;
148162import org .springframework .security .oauth2 .core .endpoint .OAuth2AuthorizationExchange ;
149163import org .springframework .security .oauth2 .core .endpoint .OAuth2AuthorizationRequest ;
150164import org .springframework .security .oauth2 .core .endpoint .OAuth2AuthorizationResponse ;
165+ import org .springframework .security .oauth2 .core .endpoint .TestOAuth2AccessTokenResponses ;
151166import org .springframework .security .oauth2 .core .endpoint .TestOAuth2AuthorizationExchanges ;
152167import org .springframework .security .oauth2 .core .endpoint .TestOAuth2AuthorizationRequests ;
153168import org .springframework .security .oauth2 .core .endpoint .TestOAuth2AuthorizationResponses ;
172187import org .springframework .security .oauth2 .server .resource .InvalidBearerTokenException ;
173188import org .springframework .security .oauth2 .server .resource .authentication .BearerTokenAuthentication ;
174189import org .springframework .security .oauth2 .server .resource .authentication .BearerTokenAuthenticationToken ;
190+ import org .springframework .security .oauth2 .server .resource .authentication .DPoPAuthenticationToken ;
175191import org .springframework .security .oauth2 .server .resource .authentication .JwtAuthenticationToken ;
176192import org .springframework .security .oauth2 .server .resource .introspection .BadOpaqueTokenException ;
177193import org .springframework .security .oauth2 .server .resource .introspection .OAuth2IntrospectionAuthenticatedPrincipal ;
188204import org .springframework .security .saml2 .provider .service .authentication .Saml2RedirectAuthenticationRequest ;
189205import org .springframework .security .saml2 .provider .service .authentication .TestSaml2AuthenticationTokens ;
190206import org .springframework .security .saml2 .provider .service .authentication .TestSaml2Authentications ;
207+ import org .springframework .security .saml2 .provider .service .authentication .TestSaml2LogoutRequests ;
191208import org .springframework .security .saml2 .provider .service .authentication .TestSaml2PostAuthenticationRequests ;
192209import org .springframework .security .saml2 .provider .service .authentication .TestSaml2RedirectAuthenticationRequests ;
210+ import org .springframework .security .saml2 .provider .service .authentication .logout .Saml2LogoutRequest ;
193211import org .springframework .security .saml2 .provider .service .registration .RelyingPartyRegistration ;
194212import org .springframework .security .saml2 .provider .service .registration .RelyingPartyRegistration .AssertingPartyDetails ;
195213import org .springframework .security .saml2 .provider .service .registration .TestRelyingPartyRegistrations ;
213231import org .springframework .security .web .savedrequest .SimpleSavedRequest ;
214232import org .springframework .security .web .server .firewall .ServerExchangeRejectedException ;
215233import org .springframework .security .web .session .HttpSessionCreatedEvent ;
234+ import org .springframework .security .web .session .HttpSessionIdChangedEvent ;
216235import org .springframework .security .web .webauthn .api .AuthenticationExtensionsClientInputs ;
217236import org .springframework .security .web .webauthn .api .AuthenticationExtensionsClientOutputs ;
218237import org .springframework .security .web .webauthn .api .AuthenticatorAssertionResponse ;
234253import org .springframework .security .web .webauthn .api .TestBytes ;
235254import org .springframework .security .web .webauthn .api .TestPublicKeyCredential ;
236255import org .springframework .security .web .webauthn .api .TestPublicKeyCredentialRequestOptions ;
256+ import org .springframework .security .web .webauthn .api .TestPublicKeyCredentialUserEntities ;
237257import org .springframework .security .web .webauthn .api .TestPublicKeyCredentialUserEntity ;
258+ import org .springframework .security .web .webauthn .api .TestPublicKeyCredentials ;
238259import org .springframework .security .web .webauthn .api .UserVerificationRequirement ;
239260import org .springframework .security .web .webauthn .authentication .WebAuthnAuthentication ;
240261import org .springframework .security .web .webauthn .authentication .WebAuthnAuthenticationRequestToken ;
@@ -262,6 +283,8 @@ class SpringSecurityCoreVersionSerializableTests {
262283
263284 private static final Map <Class <?>, Generator <?>> generatorByClassName = new HashMap <>();
264285
286+ private static final Map <Class <?>, Supplier <InstancioApi <?>>> instancioByClassName = new HashMap <>();
287+
265288 static final long securitySerialVersionUid = SpringSecurityCoreVersion .SERIAL_VERSION_UID ;
266289
267290 static Path currentVersionFolder = Paths .get ("src/test/resources/serialized/" + getCurrentVersion ());
@@ -766,10 +789,18 @@ void allSerializableClassesShouldHaveSerialVersionOrSuppressWarnings() throws Ex
766789 || Arrays .asList (suppressWarnings .value ()).contains ("Serial" );
767790 if (!hasSerialVersion && !hasSerialIgnore ) {
768791 classes .add (clazz );
792+ continue ;
793+ }
794+ boolean isReachable = Modifier .isPublic (clazz .getModifiers ());
795+ boolean hasSampleSerialization = currentVersionFolder .resolve (clazz .getName () + ".serialized" )
796+ .toFile ()
797+ .exists ();
798+ if (hasSerialVersion && isReachable && !hasSampleSerialization ) {
799+ classes .add (clazz );
769800 }
770801 }
771- assertThat (classes )
772- . describedAs ( "Found Serializable classes that are either missing a serialVersionUID or a @SuppressWarnings" )
802+ assertThat (classes ). describedAs (
803+ "Found Serializable classes that are either missing a serialVersionUID or a @SuppressWarnings or a sample serialized file " )
773804 .isEmpty ();
774805 }
775806
@@ -796,6 +827,9 @@ static Stream<Class<?>> getClassesToSerialize() throws Exception {
796827 }
797828
798829 private static InstancioApi <?> instancioWithDefaults (Class <?> clazz ) {
830+ if (instancioByClassName .containsKey (clazz )) {
831+ return instancioByClassName .get (clazz ).get ();
832+ }
799833 InstancioOfClassApi <?> instancio = Instancio .of (clazz );
800834 ResolvableType [] generics = ResolvableType .forClass (clazz ).getGenerics ();
801835 for (ResolvableType type : generics ) {
0 commit comments