首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Symfony2:为什么access_denied_handler不能工作

Symfony2:为什么access_denied_handler不能工作
EN

Stack Overflow用户
提问于 2012-08-15 19:17:39
回答 1查看 5.7K关注 0票数 4

我想在使用AccessDeniedException的情况下自定义Symfony2的行为。如果引发异常的HTTP请求是一个XMLHTTPRequest,那么我会用一个JSON来回复,否则我会生成一个302,指向登录页面。

这是我的实现。日志显示,在AccessDeniedException之后从未调用过AccessDeneidHandler。我错过了什么?

代码语言:javascript
复制
#security.yml
firewalls:
    secured_area:
        access_denied_handler: kernel.listener.access_denied.handler

代码语言:javascript
复制
#config.yml
kernel.listener.access_denied.handler:
   class: NoaLisa\Bundle\OVMBundle\DependencyInjection\AccessDeniedHandler
     tags:
        - { name: kernel.event_listener, event: security.kernel_response, method: handle}

代码语言:javascript
复制
#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'));
    }
}
}
EN

回答 1

Stack Overflow用户

发布于 2012-08-25 19:50:30

好了,当我深入研究ExceptionListener时,我终于发现了问题所在

只有当用户没有足够的权限访问资源时,才会调用access_denied_handler指向的服务。如果用户根本没有通过身份验证,则永远不会调用access_dened_handler。

security.yml中为entry_point提供服务确实解决了这个问题。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11968354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档