Я новичок в Spring Security. Как добавить прослушиватель событий, который будет успешно вызван журналом пользователя? Также мне нужно получить уникальный идентификатор сеанса в этом слушателе, который должен быть доступен дальше. Мне нужен этот идентификатор для синхронизации с другим сервером.Весенняя безопасность: добавление «При успешном прослушивании входа в систему»
32
A
ответ
41
Вам необходимо определить Spring Bean, который реализует ApplicationListener.
Затем в коде, сделать что-то вроде этого:
public void onApplicationEvent(ApplicationEvent appEvent)
{
if (appEvent instanceof AuthenticationSuccessEvent)
{
AuthenticationSuccessEvent event = (AuthenticationSuccessEvent) appEvent;
UserDetails userDetails = (UserDetails) event.getAuthentication().getPrincipal();
// ....
}
}
Затем в файле applicationContext.xml, просто определить, что боб, и он будет автоматически начнет получать события :)
10
In Grails с Spring Security Plugin, вы можете сделать это в Config.groovy:
grails.plugins.springsecurity.useSecurityEventListener = true
grails.plugins.springsecurity.onAuthenticationSuccessEvent = { e, appCtx ->
def session = SecurityRequestHolder.request.getSession(false)
session.myVar = true
}
21
Подобный ответ Филл, но изменен, чтобы принять во внимание Generics:
public class AuthenticationListener implements ApplicationListener<AuthenticationSuccessEvent> {
@Override
public void onApplicationEvent(final AuthenticationSuccessEvent event) {
// ...
}
}
38
Проблема с AuthenticationSuccessEvent заключается в том, что она не публикуется при запоминании логина. Если вы используете аутентификацию с использованием mem-me, используйте InteractiveAuthenticationSuccessEvent вместо этого, она работает для обычного входа в систему, а также для входа в систему для входа в систему.
@Component
public class LoginListener implements ApplicationListener<InteractiveAuthenticationSuccessEvent> {
@Override
public void onApplicationEvent(InteractiveAuthenticationSuccessEvent event)
{
UserDetails userDetails = (UserDetails) event.getAuthentication().getPrincipal();
// ...
}
}
Спасибо! Просто нашел AuthenticationSuccessEvent, но пытался выяснить, как зарегистрировать слушателя. – axk 2008-10-08 12:36:35
как насчет идентификатора сеанса, о котором он спрашивал? – siebmanb 2015-02-26 10:28:29
@siebmanb просто добавляет `@Autowired HttpSession session` к слушателю. Spring добавит прокси-сервер, который автоматически передает на сеанс коррекции. – 2016-02-17 22:43:11