que*_*ito 4 exception-handling symfony
我想在AccessDeniedException的情况下自定义Symfony2的行为.如果引发异常的HTTP请求是XMLHTTPRequest,那么我使用JSON回复,否则我会在登录页面中生成302.
这是我的实施.该日志显示在AccessDeniedException之后永远不会调用AccessDeneidHandler.我错过了什么?
#security.yml
firewalls:
secured_area:
access_denied_handler: kernel.listener.access_denied.handler
Run Code Online (Sandbox Code Playgroud)
#config.yml
kernel.listener.access_denied.handler:
class: NoaLisa\Bundle\OVMBundle\DependencyInjection\AccessDeniedHandler
tags:
- { name: kernel.event_listener, event: security.kernel_response, method: handle}
Run Code Online (Sandbox Code Playgroud)
#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'));
}
}
}
Run Code Online (Sandbox Code Playgroud)
好吧,最后我发现在挖掘ExceptionListener时出现了什么问题
access_denied_handler仅当用户没有足够的权限访问资源时,才会调用指向的服务.如果用户未经过身份验证,则永远不会调用access_dened_handler.
提供服务以entry_point在security.yml没有真正解决问题.
| 归档时间: |
|
| 查看次数: |
5109 次 |
| 最近记录: |