Red de conocimiento informático - Material del sitio web - Cómo cambiar el comportamiento de la ruta de destino predeterminada

Cómo cambiar el comportamiento de la ruta de destino predeterminada

Cómo cambiar el comportamiento de la ruta de destino predeterminada

De forma predeterminada, el componente de seguridad conservará la información de la última URL visitada (principalmente el nombre del firewall definido en security.yml). Redirige a los usuarios a esta ruta después de iniciar sesión correctamente y ayúdalos a permanecer en la última página web conocida que visitaron.

En algunos casos esto no es lo ideal. Por ejemplo, cuando la última URL de solicitud devuelve un objeto XMLHttpRequest con una respuesta HTML parcial o no HTML, el usuario será redirigido a una página web que el navegador no puede representar.

Para resolver este comportamiento, sólo necesita heredar la clase ExceptionListener y anular el método predeterminado llamado setTargetPath().

Primero, anule el parámetro security.exception_listener.class en su archivo de configuración.

Esto se puede hacer en su archivo de configuración principal (en Archivos de configuración en Aplicación) o en el archivo de configuración importado del paquete:

YAML:

# app/config/services.

parámetros:

# ...

security.exception_listener.class: AppBundle\Security\Firewall\ExceptionListener

XML:

AppBundle\Security\Firewall\ExceptionListener

PHP:

// app/config/services.php

// ...

$container->setParameter('security.exception_listener.class', 'AppBundle\ Security \Firewall\ExceptionListener');

A continuación, cree su propio oyente ExceptionListener:

// src/AppBundle/Security/Firewall/ExceptionListener.php

espacio de nombres AppBundle\Security\Firewall;

usa Symfony\Component\HttpFoundation\Request;

usa Symfony\Component\Security\Http\Firewall\ExceptionListener como BaseExceptionListener;

p>

clase ExceptionListener extiende BaseExceptionListener

{

función protegida setTargetPath(Request $request)

{

// No guardar ruta de destino para solicitudes XHR

// Puede agregar aquí cualquier lógica que desee

// Tenga en cuenta que las solicitudes que no son GET ya se ignoran

si ( $request->isXmlHttpRequest()) {

return;

}

parent::setTargetPath($request);

}

}

Agregue más o menos lógica aquí según lo necesite su solución.