有没有人设法让带有Spring Security的Spring Boot来处理AuthorizedEvent(即用于审计日志(?
我已经实现了以下应用程序事件侦听器:
@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());
}
}
并有一个用@PreAuthorize注释的测试 MVC 终结点。我期待春季安全补助金会出现在日志上。虽然这适用于我使用的所有其他事件(AuthenticationSuccessEvent,AuthenticationFailureEvent,AbstractAuthenticationFailureEvent(,但它不适用于AuthorizedEvent。
我尝试浏览 Spring Boot 源代码,似乎此事件未在 AuthorizationAuditListener.java 中处理,这可能是一个错误还是我以错误的方式对其进行了黑客攻击?
文档,请使用 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) {
}
}
看起来弹簧启动无法意识到这里要处理事件。
尝试注释方法,以便 spring 知道您要在此处处理事件
@EventListener(value = {AuthorizedEvent.class})
public void onApplicationEvent(AuthorizedEvent event) {
auditLogger.info("Authorization granted to user: {} - {}", event.getAuthentication().getName(), event.getConfigAttributes());
}
授权成功后,应触发授权事件。 确保FilterSecurityInterceptor 应设置 setPublishAuthorizationSuccess true