Добрый день!
Подскажите, пожалуйста, где можно разместить код для выполнения сразу после авторизации?
Ярослав, я пробовал эти события, но такая конструкция из документации не работает, т.к. авторизация не прошла и accessManager, видимо еще не знает о доступах:
SpecificOperationAccessContext accessContext =
new SpecificOperationAccessContext("customer.notify");
accessManager.applyRegisteredConstraints(accessContext);
if (accessContext.isPermitted()) {
// do notify
}
В LoginScreenSupport есть пример. В onSuccessfulAuthentication вызывается метод checkLoginToUi
Authentication currentAuthentication = SecurityContextHelper.getAuthentication();
UiLoginToUiContext loginToUiContext = new UiLoginToUiContext();
try {
SecurityContextHelper.setAuthentication(authentication);
accessManager.applyRegisteredConstraints(loginToUiContext);
} finally {
SecurityContextHelper.setAuthentication(currentAuthentication);
}
Возможно вам это поможет.
1 симпатия
А вообще SecurityContextHelper.setAuthentication(authentication);
происходит до
applicationEventPublisher.publishEvent(
new InteractiveAuthenticationSuccessEvent(authentication, this.getClass()));
Так что я не понимаю почему в подписке на InteractiveAuthenticationSuccessEvent
проверка accessManager
не срабатывает.
1 симпатия
Выбрал самое простое решение: разместил код в обработчике события MainScreen.onAfterShow
В этом месте доступны все политики ролей вместе с вложенными дочерними ролями.