|
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