Search code examples
spring-bootspring-securityspring-data-redis

AuthenticationSuccessEvent Listener for two spring applications connected through Shared Redis session


I am having two spring-boot application with shared session through Redis.. application-1 contains the login flow and application-2 uses the same session created on application-1,

Now i wanted to listen to the successful authentication on application-2.

Tried using InteractiveAuthenticationSuccessEvent listener as below ..

@EventListener({AuthenticationSuccessEvent.class, InteractiveAuthenticationSuccessEvent.class})
public void processAuthenticationSuccessEvent(AbstractAuthenticationEvent  e) {
    logger.info("Autenticación successful ....");
    e.getAuthentication().getName();
} 

Added the below code in securityConfig

@EnableWebSecurity
@Configuration
@Component
@Order
class SecurityConfig extends WebSecurityConfigurerAdapter {

.....

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
    auth.authenticationEventPublisher(authenticationEventPublisher());
}   

@Bean
public DefaultAuthenticationEventPublisher authenticationEventPublisher() {
    return new DefaultAuthenticationEventPublisher();
}

}

But 'InteractiveAuthenticationSuccessEvent' in application-2 is not triggered on authenticating on application-1..

Can someone guide me on this ?


Solution

  • I have used Redis PubSub to resolve my problem by listening to the Authentication Event from Application-1 to Application-2..