AccessDeniedException が発生した場合の Symfony2 の動作をカスタマイズしたい。例外を発生させた HTTP リクエストが XMLHTTPRequest の場合は、JSON で応答します。それ以外の場合は、ログイン ページに 302 found を生成します。
これが私の実装です。ログは、AccessDeniedException の後に AccessDeneidHandler が呼び出されないことを示しています。何が欠けていますか?
#security.yml
firewalls:
secured_area:
access_denied_handler: kernel.listener.access_denied.handler
#config.yml
kernel.listener.access_denied.handler:
class: NoaLisa\Bundle\OVMBundle\DependencyInjection\AccessDeniedHandler
tags:
- { name: kernel.event_listener, event: security.kernel_response, method: handle}
#AccessDeniedHandler
class AccessDeniedHandler implements AccessDeniedHandlerInterface{
function handle(Request $request, AccessDeniedException $accessDeniedException){
if ($request->isXmlHttpRequest()) {
$response = new Response(json_encode(array('status' => 'protected')));
return $response;
}
else {
return new RedirectResponse($this->router->generate('login'));
}
}
}