2017-03-13 88 views
0

不明白,symfony的AccessDeniedException异常始终重定向到登录页面

抛出新AccessDeniedException异常(“信息”)始终重定向到登录页面。

PS:我用FOSUserBundle这里的security.yml内容:

security: 
    encoders: 
     ANDRY\UserBundle\Entity\User: sha512 

    role_hierarchy: 
     # Un admin hérite des droits d'auteur et de modérateur 
     # ROLE_ADMIN: [ROLE_AUTEUR, ROLE_MODERATEUR] 
     # On garde ce rôle superadmin, il nous resservira par la suite 
     # ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] 
     # ROLE_EMPLOYER: ROLE_SEEKER 
     ROLE_ADMIN: [ROLE_EMPLOYER, ROLE_SEEKER, ROLE_ALLOWED_TO_SWITCH] 

    providers: 
     main: 
      id: fos_user.user_provider.username 

    firewalls: 
     dev: 
      pattern: ^/(_(profiler|wdt)|css|images|js)/ 
      security: false 

     # main_login: 
     #  pattern: ^/%locale%/login$ 
     #  anonymous: true 

     main: 
      pattern: ^/ 
      anonymous: true 
      provider: main 
      form_login: 
       login_path: fos_user_security_login 
       check_path: fos_user_security_check 
       default_target_path: /%locale% 
      logout: 
       path: fos_user_security_logout 
       target: /%locale% 
      remember_me: 
       secret: %secret% 

    access_control: 
     #  - { path: ^/admin, roles: [ROLE_ADMIN, ROLE_SUPER_ADMIN] } 
+0

的问题是不明确的 - 你想被登录失败后somwhere其他重定向或登录故障发生时,每次,即使证书看起来是正确的? –

+0

当我在代码中放置'抛出新的AccessDeniedException('message')'时,它将我重定向到登录页面,但我希望它抛出403消息 – Andry

回答

0

的Symfony的默认行为是未经验证的重定向请求,从防火墙配置登录路由。要改变这个,你必须使你自己的访问被拒绝的处理程序实现AccessDeniedHandlerInterface并配置防火墙使用它。

class AccessDeniedHandler implements AccessDeniedHandlerInterface 
{ 
    public function handle(Request $request, AccessDeniedException $accessDeniedException) 
    { 
     // ... 

     return new Response($content, 403); 
    } 
} 

将其配置为服务,并修改防火墙配置中security.yml

firewalls: 
    default: 
     ... 
     access_denied_handler: you_access_denied_handler_service 
+0

**注意**。处理程序在检查用户是否完全通过'@Security(“is_granted('IS_AUTHENTICATED_FULLY')”)'进行身份验证时不会被调用。为此,您需要遵循[此解决方案](https://stackoverflow.com/questions/17428987/what-is-the-best-way-to-notify-a-user-after-an-access-control-规则重定向/ 17432089#答案-17432089)。 – Mateusz