2017-03-13 75 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