| Viewing file:  Firewall.php (2.83 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
<?php
 /*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
 
 namespace Symfony\Component\Security\Http;
 
 use Symfony\Component\HttpKernel\KernelEvents;
 use Symfony\Component\HttpKernel\Event\GetResponseEvent;
 use Symfony\Component\HttpKernel\Event\FinishRequestEvent;
 use Symfony\Component\EventDispatcher\EventDispatcherInterface;
 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
 
 /**
 * Firewall uses a FirewallMap to register security listeners for the given
 * request.
 *
 * It allows for different security strategies within the same application
 * (a Basic authentication for the /api, and a web based authentication for
 * everything else for instance).
 *
 * @author Fabien Potencier <fabien@symfony.com>
 */
 class Firewall implements EventSubscriberInterface
 {
 private $map;
 private $dispatcher;
 private $exceptionListeners;
 
 /**
 * Constructor.
 *
 * @param FirewallMapInterface     $map        A FirewallMapInterface instance
 * @param EventDispatcherInterface $dispatcher An EventDispatcherInterface instance
 */
 public function __construct(FirewallMapInterface $map, EventDispatcherInterface $dispatcher)
 {
 $this->map = $map;
 $this->dispatcher = $dispatcher;
 $this->exceptionListeners = new \SplObjectStorage();
 }
 
 /**
 * Handles security.
 *
 * @param GetResponseEvent $event An GetResponseEvent instance
 */
 public function onKernelRequest(GetResponseEvent $event)
 {
 if (!$event->isMasterRequest()) {
 return;
 }
 
 // register listeners for this firewall
 list($listeners, $exceptionListener) = $this->map->getListeners($event->getRequest());
 if (null !== $exceptionListener) {
 $this->exceptionListeners[$event->getRequest()] = $exceptionListener;
 $exceptionListener->register($this->dispatcher);
 }
 
 // initiate the listener chain
 foreach ($listeners as $listener) {
 $listener->handle($event);
 
 if ($event->hasResponse()) {
 break;
 }
 }
 }
 
 public function onKernelFinishRequest(FinishRequestEvent $event)
 {
 $request = $event->getRequest();
 
 if (isset($this->exceptionListeners[$request])) {
 $this->exceptionListeners[$request]->unregister($this->dispatcher);
 unset($this->exceptionListeners[$request]);
 }
 }
 
 /**
 * {@inheritDoc}
 */
 public static function getSubscribedEvents()
 {
 return array(
 KernelEvents::REQUEST => array('onKernelRequest', 8),
 KernelEvents::FINISH_REQUEST => 'onKernelFinishRequest',
 );
 }
 }
 
 |