[Security] Remove ContextListener's onKernelResponse listener as it is used

This commit is contained in:
Dave Marshall 2015-01-20 13:50:10 +00:00 committed by Fabien Potencier
parent b8e4b4af3d
commit 380d8052ac
2 changed files with 36 additions and 3 deletions

View File

@ -114,6 +114,9 @@ class ContextListener implements ListenerInterface
return; return;
} }
$this->dispatcher->removeListener(KernelEvents::RESPONSE, array($this, 'onKernelResponse'));
$this->registered = false;
if (null !== $this->logger) { if (null !== $this->logger) {
$this->logger->debug('Write SecurityContext in the session'); $this->logger->debug('Write SecurityContext in the session');
} }

View File

@ -21,6 +21,7 @@ use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken; use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Component\Security\Core\SecurityContext; use Symfony\Component\Security\Core\SecurityContext;
use Symfony\Component\Security\Http\Firewall\ContextListener; use Symfony\Component\Security\Http\Firewall\ContextListener;
use Symfony\Component\EventDispatcher\EventDispatcher;
class ContextListenerTest extends \PHPUnit_Framework_TestCase class ContextListenerTest extends \PHPUnit_Framework_TestCase
{ {
@ -111,7 +112,7 @@ class ContextListenerTest extends \PHPUnit_Framework_TestCase
new Response() new Response()
); );
$listener = new ContextListener($this->securityContext, array(), 'session'); $listener = new ContextListener($this->securityContext, array(), 'session', null, new EventDispatcher());
$listener->onKernelResponse($event); $listener->onKernelResponse($event);
$this->assertTrue($session->isStarted()); $this->assertTrue($session->isStarted());
@ -130,7 +131,7 @@ class ContextListenerTest extends \PHPUnit_Framework_TestCase
new Response() new Response()
); );
$listener = new ContextListener($this->securityContext, array(), 'session'); $listener = new ContextListener($this->securityContext, array(), 'session', null, new EventDispatcher());
$listener->onKernelResponse($event); $listener->onKernelResponse($event);
$this->assertFalse($session->isStarted()); $this->assertFalse($session->isStarted());
@ -202,6 +203,35 @@ class ContextListenerTest extends \PHPUnit_Framework_TestCase
$listener->handle($event); $listener->handle($event);
} }
public function testOnKernelResponseListenerRemovesItself()
{
$context = $this->getMock('Symfony\Component\Security\Core\SecurityContextInterface');
$dispatcher = $this->getMock('Symfony\Component\EventDispatcher\EventDispatcherInterface');
$event = $this->getMockBuilder('Symfony\Component\HttpKernel\Event\FilterResponseEvent')
->disableOriginalConstructor()
->getMock();
$listener = new ContextListener($context, array(), 'key123', null, $dispatcher);
$request = $this->getMock('Symfony\Component\HttpFoundation\Request');
$request->expects($this->any())
->method('hasSession')
->will($this->returnValue(true));
$event->expects($this->any())
->method('getRequestType')
->will($this->returnValue(HttpKernelInterface::MASTER_REQUEST));
$event->expects($this->any())
->method('getRequest')
->will($this->returnValue($request));
$dispatcher->expects($this->once())
->method('removeListener')
->with(KernelEvents::RESPONSE, array($listener, 'onKernelResponse'));
$listener->onKernelResponse($event);
}
public function testHandleRemovesTokenIfNoPreviousSessionWasFound() public function testHandleRemovesTokenIfNoPreviousSessionWasFound()
{ {
$request = $this->getMock('Symfony\Component\HttpFoundation\Request'); $request = $this->getMock('Symfony\Component\HttpFoundation\Request');
@ -240,7 +270,7 @@ class ContextListenerTest extends \PHPUnit_Framework_TestCase
new Response() new Response()
); );
$listener = new ContextListener($this->securityContext, array(), 'session'); $listener = new ContextListener($this->securityContext, array(), 'session', null, new EventDispatcher());
$listener->onKernelResponse($event); $listener->onKernelResponse($event);
return $session; return $session;