@ -23,13 +23,14 @@ import javax.servlet.http.HttpServletResponse;
@@ -23,13 +23,14 @@ import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession ;
import org.springframework.context.ApplicationContext ;
import org.springframework.context.ApplicationListener ;
import org.springframework.context.event.GenericApplicationListenerAdapter ;
import org.springframework.context.event.SmartApplicationListener ;
import org.springframework.security.authentication.AuthenticationTrustResolver ;
import org.springframework.security.config.annotation.web.HttpSecurityBuilder ;
import org.springframework.security.config.annotation.web.builders.HttpSecurity ;
import org.springframework.security.context.DelegatingApplicationListener ;
import org.springframework.security.config.http.SessionCreationPolicy ;
import org.springframework.security.context.DelegatingApplicationListener ;
import org.springframework.security.core.session.SessionRegistry ;
import org.springframework.security.core.session.SessionRegistryImpl ;
import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler ;
@ -474,15 +475,25 @@ public final class SessionManagementConfigurer<H extends HttpSecurityBuilder<H>>
@@ -474,15 +475,25 @@ public final class SessionManagementConfigurer<H extends HttpSecurityBuilder<H>>
private SessionRegistry getSessionRegistry ( H http ) {
if ( sessionRegistry = = null ) {
SessionRegistryImpl sessionRegistry = new SessionRegistryImpl ( ) ;
ApplicationContext context = http . getSharedObject ( ApplicationContext . class ) ;
DelegatingApplicationListener delegating = context . getBean ( DelegatingApplicationListener . class ) ;
SmartApplicationListener smartListener = new GenericApplicationListenerAdapter ( sessionRegistry ) ;
delegating . addListener ( smartListener ) ;
registerDelegateApplicationListener ( http , sessionRegistry ) ;
this . sessionRegistry = sessionRegistry ;
}
return sessionRegistry ;
}
private void registerDelegateApplicationListener ( H http , ApplicationListener < ? > delegate ) {
ApplicationContext context = http . getSharedObject ( ApplicationContext . class ) ;
if ( context = = null ) {
return ;
}
if ( context . getBeansOfType ( DelegatingApplicationListener . class ) . isEmpty ( ) ) {
return ;
}
DelegatingApplicationListener delegating = context . getBean ( DelegatingApplicationListener . class ) ;
SmartApplicationListener smartListener = new GenericApplicationListenerAdapter ( delegate ) ;
delegating . addListener ( smartListener ) ;
}
/ * *
* Returns true if the number of concurrent sessions per user should be restricted .
* @return