diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php index afa04d7cad7d6..35cc7b1b4d912 100644 --- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php +++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php @@ -168,14 +168,6 @@ public function load(array $configs, ContainerBuilder $container) $container->getDefinition('security.authentication.guard_handler') ->replaceArgument(2, $this->statelessFirewallKeys); - if ($this->authenticatorManagerEnabled) { - foreach ($this->statelessFirewallKeys as $statelessFirewallId) { - $container - ->setDefinition('security.listener.session.'.$statelessFirewallId, new ChildDefinition('security.listener.session')) - ->addTag('kernel.event_subscriber', ['dispatcher' => 'security.event_dispatcher.'.$statelessFirewallId]); - } - } - if ($config['encoders']) { $this->createEncoders($config['encoders'], $container); } @@ -373,6 +365,12 @@ private function createFirewall(ContainerBuilder $container, string $id, array $ $contextKey = $firewall['context'] ?? $id; $listeners[] = new Reference($contextListenerId = $this->createContextListener($container, $contextKey)); $sessionStrategyId = 'security.authentication.session_strategy'; + + if ($this->authenticatorManagerEnabled) { + $container + ->setDefinition('security.listener.session.'.$id, new ChildDefinition('security.listener.session')) + ->addTag('kernel.event_subscriber', ['dispatcher' => $firewallEventDispatcherId]); + } } else { $this->statelessFirewallKeys[] = $id; $sessionStrategyId = 'security.authentication.session_strategy_noop'; diff --git a/src/Symfony/Bundle/SecurityBundle/Resources/config/security_authenticator.xml b/src/Symfony/Bundle/SecurityBundle/Resources/config/security_authenticator.xml index fa9f94aeaee3c..bc0e05bb3fa40 100644 --- a/src/Symfony/Bundle/SecurityBundle/Resources/config/security_authenticator.xml +++ b/src/Symfony/Bundle/SecurityBundle/Resources/config/security_authenticator.xml @@ -60,10 +60,8 @@ + class="Symfony\Component\Security\Http\EventListener\SessionStrategyListener"> - stateless firewall keys getRawContainer(); + + $firewallId = 'stateless_firewall'; + $container->loadFromExtension('security', [ + 'enable_authenticator_manager' => true, + 'firewalls' => [ + $firewallId => [ + 'pattern' => '/.*', + 'stateless' => true, + 'http_basic' => null, + ], + ], + ]); + + $container->compile(); + + $this->assertFalse($container->has('security.listener.session.'.$firewallId)); + } + + public function testCompilesWithSessionListenerWithStatefulllFirewallWithAuthenticationManager() + { + $container = $this->getRawContainer(); + + $firewallId = 'statefull_firewall'; + $container->loadFromExtension('security', [ + 'enable_authenticator_manager' => true, + 'firewalls' => [ + $firewallId => [ + 'pattern' => '/.*', + 'stateless' => false, + 'http_basic' => null, + ], + ], + ]); + + $container->compile(); + + $this->assertTrue($container->has('security.listener.session.'.$firewallId)); + } + protected function getRawContainer() { $container = new ContainerBuilder();