Вход Регистрация
Файл: symfony-2.7/src/Symfony/Component/Security/Http/Firewall.php
Строк: 164
<?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 SymfonyComponentSecurityHttp;

use 
SymfonyComponentHttpKernelKernelEvents;
use 
SymfonyComponentHttpKernelEventGetResponseEvent;
use 
SymfonyComponentHttpKernelEventFinishRequestEvent;
use 
SymfonyComponentEventDispatcherEventDispatcherInterface;
use 
SymfonyComponentEventDispatcherEventSubscriberInterface;

/**
 * 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 $mapEventDispatcherInterface $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',
        );
    }
}
Онлайн: 0
Реклама