Configure firewall's kernel exception listener with configured entry point or a default entry point

This commit is contained in:
Reinier Kip 2014-12-02 16:29:24 +01:00 committed by Fabien Potencier
parent b604b0ae75
commit b1222624b2
3 changed files with 26 additions and 3 deletions

View File

@ -334,10 +334,10 @@ class SecurityExtension extends Extension
} }
// Determine default entry point // Determine default entry point
$defaultEntryPoint = isset($firewall['entry_point']) ? $firewall['entry_point'] : null; $configuredEntryPoint = isset($firewall['entry_point']) ? $firewall['entry_point'] : null;
// Authentication listeners // Authentication listeners
list($authListeners, $defaultEntryPoint) = $this->createAuthenticationListeners($container, $id, $firewall, $authenticationProviders, $defaultProvider, $defaultEntryPoint); list($authListeners, $defaultEntryPoint) = $this->createAuthenticationListeners($container, $id, $firewall, $authenticationProviders, $defaultProvider, $configuredEntryPoint);
$listeners = array_merge($listeners, $authListeners); $listeners = array_merge($listeners, $authListeners);
@ -350,7 +350,7 @@ class SecurityExtension extends Extension
$listeners[] = new Reference('security.access_listener'); $listeners[] = new Reference('security.access_listener');
// Exception listener // Exception listener
$exceptionListener = new Reference($this->createExceptionListener($container, $firewall, $id, $defaultEntryPoint)); $exceptionListener = new Reference($this->createExceptionListener($container, $firewall, $id, $configuredEntryPoint ?: $defaultEntryPoint));
return array($matcher, $listeners, $exceptionListener); return array($matcher, $listeners, $exceptionListener);
} }

View File

@ -35,6 +35,20 @@ class FirewallEntryPointTest extends WebTestCase
); );
} }
public function testItUsesTheConfiguredEntryPointFromTheExceptionListenerWithFormLoginAndNoCredentials()
{
$client = $this->createClient(array('test_case' => 'FirewallEntryPoint', 'root_config' => 'config_form_login.yml'));
$client->insulate();
$client->request('GET', '/secure/resource');
$this->assertEquals(
EntryPointStub::RESPONSE_TEXT,
$client->getResponse()->getContent(),
"Custom entry point wasn't started"
);
}
protected function setUp() protected function setUp()
{ {
parent::setUp(); parent::setUp();

View File

@ -0,0 +1,9 @@
imports:
- { resource: ./config.yml }
security:
firewalls:
secure:
pattern: ^/
form_login:
check_path: /login_check