2016-02-16 3 views
3

Неужели кому-нибудь удалось получить Spring Boot w/Spring Security для обработки AuthorizedEvent (т. Е. Для журнала аудита)?Spring Boot + Spring Аутентификация об успешности авторизации безопасности

Я осуществил следующий слушатель событий приложений:

@Component 
public class AuthorizationSuccessAudit implements ApplicationListener<AuthorizedEvent> { 

    private static Logger auditLogger = LoggerFactory.getLogger("audit"); 

    @Override 
    public void onApplicationEvent(AuthorizedEvent event) { 
     auditLogger.info("Authorization granted to user: {} - {}", event.getAuthentication().getName(), event.getConfigAttributes()); 
    } 

} 

и есть тест MVC конечную точку с аннотацией @PreAuthorize. Я ожидал, что весенние гранты безопасности появятся на бревне. Хотя это работает для каждого другого события, которое я использовал (AuthenticationSuccessEvent, AuthenticationFailureEvent, AbstractAuthenticationFailureEvent), это не для AuthorizedEvent.

Я пробовал просматривать источник загрузки Spring, и похоже, что это событие не обрабатывается в AuthorizationAuditListener.java, возможно, это ошибка или я взламываю ее неправильно?

ответ

0

Согласно spring boot documentation, используйте Spring Boot Actuator (аудит для Spring Boot) и предоставите свои собственные реализации AbstractAuthorizationAuditListener.

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-actuator</artifactId> 
    <version>1.3.0.RELEASE</version> 
</dependency> 

И что-то похожее на это ..

class TestAuthorizationAuditListener extends AbstractAuthorizationAuditListener { 

    @Override 
    public void setApplicationEventPublisher(ApplicationEventPublisher publisher) { 
    } 

    @Override 
    public void onApplicationEvent(AbstractAuthorizationEvent event) { 
    } 

} 
0

Похоже яровой ботинке не может понять, что здесь вы хотите обработать событие.

Try аннотировать метод так, что весна знает, что здесь нужно обрабатывать событие

@EventListener(value = {AuthorizedEvent.class}) 
public void onApplicationEvent(AuthorizedEvent event) { 
     auditLogger.info("Authorization granted to user: {} - {}", event.getAuthentication().getName(), event.getConfigAttributes()); 
    }