Обновленный контекст безопасности Spring недоступен при перенаправлении
На одном из моих контроллеров - перед перенаправлением - я выполняю следующий код:
Credential oldCredential = (Credential) authentication.getCredentials();
Authentication authenticationToken = new AuthenticationToken(new Credential(oldCredential.getCookieValue(), oldCredential.getPassword()),
updatedAccountDetails);
SecurityContextHolder.getContext().setAuthentication(authenticationToken);
Когда я проверяю объект аутентификации после его установкиЯ вижу, что контекст аутентификации правильно обновлен.После выполнения кода выше я перенаправляю.После завершения перенаправления загруженный контекст безопасности становится старым!То есть: когда я проверяю контекст безопасности, он содержит , а не новый токен аутентификации.
Если я сделаю следующее для теста - я добавлю setAttributE (...) после setAuthentication (...) - я получу новый аутентификацию в моем сеансе, но под (очевидно) другим ключом: test.Я попробовал несколько стратегий для SecurityContextHolder (MODE_THREADLOCAL, MODE_INHERITABLETHREADLOCAL, MODE_GLOBAL), хотя я думаю, что MODE_THREADLOCAL по умолчанию подходит для моего приложения.
request.getSession(false).setAttribute("test", authenticationToken);
Странно то, что если я отлаживаю и проверяю в SecurityContextPersistenceFilter HttpSessionSecurityContextRepository, я вижу, что после перенаправление загруженного контекста фактически является новым!По какой-то причине - неизвестной мне на данный момент - эта нагрузка, однако, в какой-то момент позже заменяется (?) Старым контекстом безопасности.