|
1 | 1 | /*
|
2 |
| - * Copyright 2002-2024 the original author or authors. |
| 2 | + * Copyright 2002-2025 the original author or authors. |
3 | 3 | *
|
4 | 4 | * Licensed under the Apache License, Version 2.0 (the "License");
|
5 | 5 | * you may not use this file except in compliance with the License.
|
|
54 | 54 | import org.springframework.beans.factory.config.BeanDefinition;
|
55 | 55 | import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
|
56 | 56 | import org.springframework.core.type.filter.AssignableTypeFilter;
|
| 57 | +import org.springframework.mock.web.MockHttpSession; |
57 | 58 | import org.springframework.security.access.AccessDeniedException;
|
58 | 59 | import org.springframework.security.access.AuthorizationServiceException;
|
59 | 60 | import org.springframework.security.access.intercept.RunAsUserToken;
|
|
73 | 74 | import org.springframework.security.authentication.TestAuthentication;
|
74 | 75 | import org.springframework.security.authentication.TestingAuthenticationToken;
|
75 | 76 | import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
| 77 | +import org.springframework.security.authentication.event.AuthenticationFailureBadCredentialsEvent; |
| 78 | +import org.springframework.security.authentication.event.AuthenticationFailureCredentialsExpiredEvent; |
| 79 | +import org.springframework.security.authentication.event.AuthenticationFailureDisabledEvent; |
| 80 | +import org.springframework.security.authentication.event.AuthenticationFailureExpiredEvent; |
| 81 | +import org.springframework.security.authentication.event.AuthenticationFailureLockedEvent; |
| 82 | +import org.springframework.security.authentication.event.AuthenticationFailureProviderNotFoundEvent; |
| 83 | +import org.springframework.security.authentication.event.AuthenticationFailureProxyUntrustedEvent; |
| 84 | +import org.springframework.security.authentication.event.AuthenticationFailureServiceExceptionEvent; |
| 85 | +import org.springframework.security.authentication.event.AuthenticationSuccessEvent; |
| 86 | +import org.springframework.security.authentication.event.InteractiveAuthenticationSuccessEvent; |
| 87 | +import org.springframework.security.authentication.event.LogoutSuccessEvent; |
76 | 88 | import org.springframework.security.authentication.jaas.JaasAuthenticationToken;
|
| 89 | +import org.springframework.security.authentication.jaas.event.JaasAuthenticationFailedEvent; |
| 90 | +import org.springframework.security.authentication.jaas.event.JaasAuthenticationSuccessEvent; |
77 | 91 | import org.springframework.security.authentication.ott.InvalidOneTimeTokenException;
|
78 | 92 | import org.springframework.security.authentication.ott.OneTimeTokenAuthenticationToken;
|
79 | 93 | import org.springframework.security.authentication.password.CompromisedPasswordException;
|
80 | 94 | import org.springframework.security.cas.authentication.CasAssertionAuthenticationToken;
|
81 | 95 | import org.springframework.security.cas.authentication.CasAuthenticationToken;
|
82 | 96 | import org.springframework.security.cas.authentication.CasServiceTicketAuthenticationToken;
|
| 97 | +import org.springframework.security.core.Authentication; |
83 | 98 | import org.springframework.security.core.GrantedAuthority;
|
84 | 99 | import org.springframework.security.core.SpringSecurityCoreVersion;
|
85 | 100 | import org.springframework.security.core.authority.AuthorityUtils;
|
| 101 | +import org.springframework.security.core.context.SecurityContext; |
| 102 | +import org.springframework.security.core.context.SecurityContextImpl; |
| 103 | +import org.springframework.security.core.session.AbstractSessionEvent; |
86 | 104 | import org.springframework.security.core.session.ReactiveSessionInformation;
|
87 | 105 | import org.springframework.security.core.session.SessionInformation;
|
88 | 106 | import org.springframework.security.core.userdetails.UserDetails;
|
|
163 | 181 | import org.springframework.security.web.authentication.rememberme.InvalidCookieException;
|
164 | 182 | import org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationException;
|
165 | 183 | import org.springframework.security.web.authentication.session.SessionAuthenticationException;
|
| 184 | +import org.springframework.security.web.authentication.session.SessionFixationProtectionEvent; |
| 185 | +import org.springframework.security.web.authentication.switchuser.AuthenticationSwitchUserEvent; |
166 | 186 | import org.springframework.security.web.authentication.www.NonceExpiredException;
|
167 | 187 | import org.springframework.security.web.csrf.CsrfException;
|
168 | 188 | import org.springframework.security.web.csrf.DefaultCsrfToken;
|
169 | 189 | import org.springframework.security.web.csrf.InvalidCsrfTokenException;
|
170 | 190 | import org.springframework.security.web.csrf.MissingCsrfTokenException;
|
171 | 191 | import org.springframework.security.web.firewall.RequestRejectedException;
|
172 | 192 | import org.springframework.security.web.server.firewall.ServerExchangeRejectedException;
|
| 193 | +import org.springframework.security.web.session.HttpSessionCreatedEvent; |
173 | 194 |
|
174 | 195 | import static org.assertj.core.api.Assertions.assertThat;
|
175 | 196 | import static org.assertj.core.api.Assertions.fail;
|
@@ -200,6 +221,8 @@ class SpringSecurityCoreVersionSerializableTests {
|
200 | 221 |
|
201 | 222 | static {
|
202 | 223 | UserDetails user = TestAuthentication.user();
|
| 224 | + Authentication authentication = TestAuthentication.authenticated(user); |
| 225 | + SecurityContext securityContext = new SecurityContextImpl(authentication); |
203 | 226 |
|
204 | 227 | // oauth2-core
|
205 | 228 | generatorByClassName.put(DefaultOAuth2User.class, (r) -> TestOAuth2Users.create());
|
@@ -375,6 +398,37 @@ class SpringSecurityCoreVersionSerializableTests {
|
375 | 398 | (r) -> new UsernameNotFoundException("error", new RuntimeException()));
|
376 | 399 | generatorByClassName.put(TestingAuthenticationToken.class,
|
377 | 400 | (r) -> applyDetails(new TestingAuthenticationToken("username", "password")));
|
| 401 | + generatorByClassName.put(AuthenticationFailureBadCredentialsEvent.class, |
| 402 | + (r) -> new AuthenticationFailureBadCredentialsEvent(authentication, |
| 403 | + new BadCredentialsException("message"))); |
| 404 | + generatorByClassName.put(AuthenticationFailureCredentialsExpiredEvent.class, |
| 405 | + (r) -> new AuthenticationFailureCredentialsExpiredEvent(authentication, |
| 406 | + new CredentialsExpiredException("message"))); |
| 407 | + generatorByClassName.put(AuthenticationFailureDisabledEvent.class, |
| 408 | + (r) -> new AuthenticationFailureDisabledEvent(authentication, new DisabledException("message"))); |
| 409 | + generatorByClassName.put(AuthenticationFailureExpiredEvent.class, |
| 410 | + (r) -> new AuthenticationFailureExpiredEvent(authentication, new AccountExpiredException("message"))); |
| 411 | + generatorByClassName.put(AuthenticationFailureLockedEvent.class, |
| 412 | + (r) -> new AuthenticationFailureLockedEvent(authentication, new LockedException("message"))); |
| 413 | + generatorByClassName.put(AuthenticationFailureProviderNotFoundEvent.class, |
| 414 | + (r) -> new AuthenticationFailureProviderNotFoundEvent(authentication, |
| 415 | + new ProviderNotFoundException("message"))); |
| 416 | + generatorByClassName.put(AuthenticationFailureProxyUntrustedEvent.class, |
| 417 | + (r) -> new AuthenticationFailureProxyUntrustedEvent(authentication, |
| 418 | + new AuthenticationServiceException("message"))); |
| 419 | + generatorByClassName.put(AuthenticationFailureServiceExceptionEvent.class, |
| 420 | + (r) -> new AuthenticationFailureServiceExceptionEvent(authentication, |
| 421 | + new AuthenticationServiceException("message"))); |
| 422 | + generatorByClassName.put(AuthenticationSuccessEvent.class, |
| 423 | + (r) -> new AuthenticationSuccessEvent(authentication)); |
| 424 | + generatorByClassName.put(InteractiveAuthenticationSuccessEvent.class, |
| 425 | + (r) -> new InteractiveAuthenticationSuccessEvent(authentication, Authentication.class)); |
| 426 | + generatorByClassName.put(LogoutSuccessEvent.class, (r) -> new LogoutSuccessEvent(authentication)); |
| 427 | + generatorByClassName.put(JaasAuthenticationFailedEvent.class, |
| 428 | + (r) -> new JaasAuthenticationFailedEvent(authentication, new RuntimeException("message"))); |
| 429 | + generatorByClassName.put(JaasAuthenticationSuccessEvent.class, |
| 430 | + (r) -> new JaasAuthenticationSuccessEvent(authentication)); |
| 431 | + generatorByClassName.put(AbstractSessionEvent.class, (r) -> new AbstractSessionEvent(securityContext)); |
378 | 432 |
|
379 | 433 | // cas
|
380 | 434 | generatorByClassName.put(CasServiceTicketAuthenticationToken.class, (r) -> {
|
@@ -448,6 +502,12 @@ class SpringSecurityCoreVersionSerializableTests {
|
448 | 502 | generatorByClassName.put(RequestRejectedException.class, (r) -> new RequestRejectedException("message"));
|
449 | 503 | generatorByClassName.put(ServerExchangeRejectedException.class,
|
450 | 504 | (r) -> new ServerExchangeRejectedException("message"));
|
| 505 | + generatorByClassName.put(SessionFixationProtectionEvent.class, |
| 506 | + (r) -> new SessionFixationProtectionEvent(authentication, "old", "new")); |
| 507 | + generatorByClassName.put(AuthenticationSwitchUserEvent.class, |
| 508 | + (r) -> new AuthenticationSwitchUserEvent(authentication, user)); |
| 509 | + generatorByClassName.put(HttpSessionCreatedEvent.class, |
| 510 | + (r) -> new HttpSessionCreatedEvent(new MockHttpSession())); |
451 | 511 | }
|
452 | 512 |
|
453 | 513 | @ParameterizedTest
|
|
0 commit comments