Обновленный контекст безопасности Spring недоступен в сеансе при перенаправлении - PullRequest
0 голосов
/ 18 июня 2019

Обновленный контекст безопасности 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, я вижу, что после перенаправление загруженного контекста фактически является новым!По какой-то причине - неизвестной мне на данный момент - эта нагрузка, однако, в какой-то момент позже заменяется (?) Старым контекстом безопасности.

1 Ответ

0 голосов
/ 19 июня 2019

Убедитесь, что вы вызвали setAuthenticated (true), иначе контекст безопасности не обновляется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...