Here is my SecureConfig
file, along with custom SessionRepository and custom username password authentication filter.
@Bean(name = "sessionRegistry") public SessionRegistry sessionRegistry() { return new SessionRegistryImpl(); }
@Bean
public ServletListenerRegistrationBean<HttpSessionEventPublisher> httpSessionEventPublisher() {
return new ServletListenerRegistrationBean<HttpSessionEventPublisher>(new HttpSessionEventPublisher());
}
@Bean
@Order(1)
public ConcurrentSessionControlAuthenticationStrategy concurrentSessionControlAuthenticationStrategy(){
ConcurrentSessionControlAuthenticationStrategy cscas= new ConcurrentSessionControlAuthenticationStrategy(sessionRegistry());
cscas.setMaximumSessions(-1);
cscas.setExceptionIfMaximumExceeded(true);
return cscas;
}
@Bean
@Order(2)
public SessionFixationProtectionStrategy sessionFixationProtectionStrategy(){
return new SessionFixationProtectionStrategy();
}
@Bean
@Order(3)
public RegisterSessionAuthenticationStrategy registerSessionAuthenticationStrategy(){
RegisterSessionAuthenticationStrategy registerSessionAuthenticationStrategy = new RegisterSessionAuthenticationStrategy(sessionRegistry());
return registerSessionAuthenticationStrategy;
}
@Bean
public CompositeSessionAuthenticationStrategy compositeSessionAuthenticationStrategy(){
List<SessionAuthenticationStrategy> sessionAuthenticationStrategies = new ArrayList<>();
sessionAuthenticationStrategies.add(concurrentSessionControlAuthenticationStrategy());
sessionAuthenticationStrategies.add(sessionFixationProtectionStrategy());
sessionAuthenticationStrategies.add(registerSessionAuthenticationStrategy());
CompositeSessionAuthenticationStrategy compositeSessionAuthenticationStrategy = new CompositeSessionAuthenticationStrategy(sessionAuthenticationStrategies);
return compositeSessionAuthenticationStrategy;
}
http.sessionManagement().sessionFixation().migrateSession().sessionAuthenticationStrategy(compositeSessionAuthenticationStrategy);
and my service class :
@Autowired
@Resource(name="sessionRegistry")
private SessionRegistry sessionRegistry;
//getting all logged in users from method
public List<CurrentUser> listLogInCurrentUsers() {
List<Object> principals = sessionRegistry.getAllPrincipals();
LOGGER.info("prinipals: "+principals.get(0));
List<CurrentUser> usersList = new ArrayList<CurrentUser>();
for (Object principal : principals) {
if (principal instanceof org.springframework.security.core.userdetails.User) {
usersList.add(((CurrentUser) principal));
}
}
return usersList;
}
And i am getting always empty collection, where i did wrong ... i almost spent with days with problem.