diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Compiler/AddAuthenticationProvidersPass.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Compiler/AddAuthenticationProvidersPass.php
deleted file mode 100644
index 3b5745333d..0000000000
--- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Compiler/AddAuthenticationProvidersPass.php
+++ /dev/null
@@ -1,27 +0,0 @@
-hasDefinition('security.authentication.manager')) {
- return;
- }
-
- $providers = array();
- foreach ($container->findTaggedServiceIds('security.authentication_provider') as $id => $attributes) {
- $providers[] = new Reference($id);
- }
-
- $container
- ->getDefinition('security.authentication.manager')
- ->setArguments(array($providers))
- ;
- }
-}
\ No newline at end of file
diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Configuration.php
index 624f2d4b15..c10bd89e7a 100644
--- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Configuration.php
+++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Configuration.php
@@ -159,7 +159,7 @@ class Configuration
->prototype('scalar')->end()
->end()
->end()
- ->booleanNode('anonymous')->end()
+ ->booleanNode('anonymous')->defaultFalse()->end()
->arrayNode('switch_user')
->scalarNode('provider')->end()
->scalarNode('parameter')->defaultValue('_switch_user')->end()
diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/AbstractFactory.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/AbstractFactory.php
index 88b481e3b1..745f6f427b 100644
--- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/AbstractFactory.php
+++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/AbstractFactory.php
@@ -42,10 +42,6 @@ abstract class AbstractFactory implements SecurityFactoryInterface
{
// authentication provider
$authProviderId = $this->createAuthProvider($container, $id, $config, $userProviderId);
- $container
- ->getDefinition($authProviderId)
- ->addTag('security.authentication_provider')
- ;
// authentication listener
$listenerId = $this->createListener($container, $id, $config, $userProviderId);
diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/HttpBasicFactory.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/HttpBasicFactory.php
index 9b2b7a870a..f28bd9befb 100644
--- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/HttpBasicFactory.php
+++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/HttpBasicFactory.php
@@ -31,7 +31,6 @@ class HttpBasicFactory implements SecurityFactoryInterface
->setDefinition($provider, new DefinitionDecorator('security.authentication.provider.dao'))
->setArgument(0, new Reference($userProvider))
->setArgument(2, $id)
- ->addTag('security.authentication_provider')
;
// listener
diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/HttpDigestFactory.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/HttpDigestFactory.php
index 49cf748cf4..618225567d 100644
--- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/HttpDigestFactory.php
+++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/HttpDigestFactory.php
@@ -31,7 +31,6 @@ class HttpDigestFactory implements SecurityFactoryInterface
->setDefinition($provider, new DefinitionDecorator('security.authentication.provider.dao'))
->setArgument(0, new Reference($userProvider))
->setArgument(2, $id)
- ->addTag('security.authentication_provider')
;
// listener
diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/RememberMeFactory.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/RememberMeFactory.php
index c4727429ab..1a42372266 100644
--- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/RememberMeFactory.php
+++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/RememberMeFactory.php
@@ -31,7 +31,6 @@ class RememberMeFactory implements SecurityFactoryInterface
->setDefinition($authProviderId, new DefinitionDecorator('security.authentication.provider.rememberme'))
->addArgument($config['key'])
->addArgument($id)
- ->addTag('security.authentication_provider')
;
// remember me services
diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/X509Factory.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/X509Factory.php
index d53f75d978..e59f219b28 100644
--- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/X509Factory.php
+++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/X509Factory.php
@@ -32,7 +32,6 @@ class X509Factory implements SecurityFactoryInterface
->setDefinition($provider, new DefinitionDecorator('security.authentication.provider.pre_authenticated'))
->setArgument(0, new Reference($userProvider))
->addArgument($id)
- ->addTag('security.authentication_provider')
;
// listener
diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php
index 81e0bb1c86..49498f3fa1 100644
--- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php
+++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php
@@ -175,9 +175,9 @@ class SecurityExtension extends Extension
// load firewall map
$mapDef = $container->getDefinition('security.firewall.map');
- $map = array();
+ $map = $authenticationProviders = array();
foreach ($firewalls as $name => $firewall) {
- list($matcher, $listeners, $exceptionListener) = $this->createFirewall($container, $name, $firewall, $providerIds, $factories);
+ list($matcher, $listeners, $exceptionListener) = $this->createFirewall($container, $name, $firewall, $authenticationProviders, $providerIds, $factories);
$contextId = 'security.firewall.map.context.'.$name;
$context = $container->setDefinition($contextId, new DefinitionDecorator('security.firewall.context'));
@@ -188,9 +188,18 @@ class SecurityExtension extends Extension
$map[$contextId] = $matcher;
}
$mapDef->setArgument(1, $map);
+
+ // add authentication providers to authentication manager
+ $authenticationProviders = array_map(function($id) {
+ return new Reference($id);
+ }, array_values(array_unique($authenticationProviders)));
+ $container
+ ->getDefinition('security.authentication.manager')
+ ->setArgument(0, $authenticationProviders)
+ ;
}
- protected function createFirewall(ContainerBuilder $container, $id, $firewall, $providerIds, array $factories)
+ protected function createFirewall(ContainerBuilder $container, $id, $firewall, &$authenticationProviders, $providerIds, array $factories)
{
// Matcher
$i = 0;
@@ -259,7 +268,7 @@ class SecurityExtension extends Extension
}
// Authentication listeners
- list($authListeners, $providers, $defaultEntryPoint) = $this->createAuthenticationListeners($container, $id, $firewall, $defaultProvider, $factories);
+ list($authListeners, $defaultEntryPoint) = $this->createAuthenticationListeners($container, $id, $firewall, $authenticationProviders, $defaultProvider, $factories);
$listeners = array_merge($listeners, $authListeners);
@@ -295,10 +304,9 @@ class SecurityExtension extends Extension
return $this->contextListeners[$contextKey] = $listenerId;
}
- protected function createAuthenticationListeners($container, $id, $firewall, $defaultProvider, array $factories)
+ protected function createAuthenticationListeners($container, $id, $firewall, &$authenticationProviders, $defaultProvider, array $factories)
{
$listeners = array();
- $providers = array();
$hasListeners = false;
$defaultEntryPoint = null;
@@ -312,7 +320,7 @@ class SecurityExtension extends Extension
list($provider, $listenerId, $defaultEntryPoint) = $factory->create($container, $id, $firewall[$key], $userProvider, $defaultEntryPoint);
$listeners[] = new Reference($listenerId);
- $providers[] = new Reference($provider);
+ $authenticationProviders[] = $provider;
$hasListeners = true;
}
}
@@ -321,6 +329,7 @@ class SecurityExtension extends Extension
// Anonymous
if (isset($firewall['anonymous'])) {
$listeners[] = new Reference('security.authentication.listener.anonymous');
+ $authenticationProviders[] = 'security.authentication.provider.anonymous';
$hasListeners = true;
}
@@ -328,7 +337,7 @@ class SecurityExtension extends Extension
throw new \LogicException(sprintf('No authentication listener registered for pattern "%s".', isset($firewall['pattern']) ? $firewall['pattern'] : ''));
}
- return array($listeners, $providers, $defaultEntryPoint);
+ return array($listeners, $defaultEntryPoint);
}
protected function createEncoders($encoders, ContainerBuilder $container)
diff --git a/src/Symfony/Bundle/SecurityBundle/Resources/config/security_listeners.xml b/src/Symfony/Bundle/SecurityBundle/Resources/config/security_listeners.xml
index f36a6c461a..9be00b4abb 100644
--- a/src/Symfony/Bundle/SecurityBundle/Resources/config/security_listeners.xml
+++ b/src/Symfony/Bundle/SecurityBundle/Resources/config/security_listeners.xml
@@ -54,7 +54,6 @@
%security.anonymous.key%
-