Я новичок ie в Spring Security, и у меня проблема с истечением срока действия пользовательского сеанса.
В моем приложении есть администратор с ROLE_ADMIN
, и они могут изменять роли других пользователей.
Я хочу завершить сеанс пользователя, полномочия которого изменены администратором.
Я обнаружил, что могу получить сеанс всех вошедших в систему пользователей с помощью SessionRegistry.
Я проверил, что могу получить всю информацию о сеансе с помощью sessionRegistry.getAllSessions()
, и попытался удалить информацию о сеансе с помощью приведенных ниже кодов.
List<SessionInformation> sessionInformations = sessionRegistry.getAllSessions(allPrincipals.get(i), false);
for (SessionInformation information : sessionInformations) {
information.expireNow();
sessionRegistry.removeSessionInformation(information.getSessionId());
}
allPrincipals.set(i, new AccountUserAdaptor(requestedAccount));
Я думал, что приведенного выше кода достаточно, чтобы истечь сеанс указанного c другого пользователя.
Но в SecurityContextPersistenceFilter
аутентификация восстанавливается из сеанса, который, как я думал, уже истек.
Я проверил, что с помощью request.getSession()
я могу получить действительный сеанс, который, как я думал, уже истек. Даже SessionID в information.getSessionId()
и request.getSession()
одинаков.
Я хочу знать, почему сеанс не истек.
Я использую Spring (не Spring-Boot)