Questions & Feedback
Found a typo or an error?
Want to improve this document? Edit it.
Need support or have a technical question?
Post to the user mailing-list.
Master Symfony2 fundamentals
Symfony hosting done right
Discover the SensioLabs Support
Come cambiare il comportamento del percorso di rinvio predefinito
Come cambiare il comportamento del percorso di rinvio predefinito¶
Per impostazione predefinita, il componente della sicurezza mantiene l'informazione
sull'URI dell'ultima richiesta in una variabile di sessione chiamata _security.target_path.
Dopo un login eseguito con successo, l'utente viene rinviato a tale percorso, per aiutarlo
a continuare dalla sua ultima pagina vista.
In alcune occasioni, tale comportamento è inatteso. Per sempio, quando l'URI dell'ultima richiesta era un POST HTTP su una rotta configurata per consentire solo il metodo POST, l'utente viene rinviato a tale rotta per ottenere un errore 404.
Per ovviare a questo problema, basta estendere la classe ExceptionListener
e sovrascrivere il metodo chiamato setTargetPath().
Sovrascrivere prima il parametro security.exception_listener.class nel file di
configurazione. Lo si può fare nel file di configurazione principale (in
app/config) o nel file di configurazione di un bundle:
- YAML
1 2 3 4
# src/Acme/HelloBundle/Resources/config/services.yml parameters: # ... security.exception_listener.class: Acme\HelloBundle\Security\Firewall\ExceptionListener
- XML
1 2 3 4 5
<!-- src/Acme/HelloBundle/Resources/config/services.xml --> <parameters> <!-- ... --> <parameter key="security.exception_listener.class">Acme\HelloBundle\Security\Firewall\ExceptionListener</parameter> </parameters>
- PHP
1 2 3
// src/Acme/HelloBundle/Resources/config/services.php // ... $container->setParameter('security.exception_listener.class', 'Acme\HelloBundle\Security\Firewall\ExceptionListener');
Creare quindi il proprio ExceptionListener:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | // src/Acme/HelloBundle/Security/Firewall/ExceptionListener.php
namespace Acme\HelloBundle\Security\Firewall;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Http\Firewall\ExceptionListener as BaseExceptionListener;
class ExceptionListener extends BaseExceptionListener
{
protected function setTargetPath(Request $request)
{
// Non salavre il percorso per richieste XHR e non GET
// Si può aggiungere altra logica a piacere
if ($request->isXmlHttpRequest() || 'GET' !== $request->getMethod()) {
return;
}
$request->getSession()->set('_security.target_path', $request->getUri());
}
}
|
Aggiungere pure altra logica, se necessaria!





is a trademark of Fabien Potencier. All rights reserved.