我的申请分为三个部分:
^/backend
受 ip ^/member
受登录 ^/
除access_denied_url
外,一切正常。我尝试指定路由名称和普通路径。
当我从配置的IP以外的IP访问/backend
时,我收到以下消息:
访问此资源需要完全身份验证。 500内部服务器错误 - InsufficientAuthenticationException 1个链接的异常:AccessDeniedException»
在开发环境中,这个异常根本没有导致致命错误但是access_denied_url
选项不应该以某种方式重定向到给定的URL?
这是我的security.yml:
security:
firewalls:
backend:
pattern: ^/backend
anonymous: ~
access_denied_url: /403
main:
pattern: ^/
anonymous: ~
form_login:
success_handler: my_auth_handler
failure_handler: my_auth_handler
use_referer: true
check_path: login_check
logout:
path: /logout
success_handler: my_auth_handler
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
access_control:
- { path: ^/backend, roles: IS_AUTHENTICATED_ANONYMOUSLY, ips: [127.0.0.1] }
- { path: ^/backend, roles: ROLE_NO_ACCESS }
- { path: ^/userlounge, roles: IS_AUTHENTICATED_FULLY }
- { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
providers:
frontend:
id: my_user_provider
encoders:
My\FrontEndBundle\User\MyUser:
algorithm: md5
encode_as_base64: false
iterations: 1
提前感谢您的帮助!
答案 0 :(得分:4)
access_denied_url
仅在用户的令牌不是匿名且记忆时才有效。
有关详细信息,请参阅: https://github.com/symfony/symfony/blob/2.6/src/Symfony/Component/Security/Http/Firewall/ExceptionListener.php#L120 https://github.com/symfony/symfony/blob/2.6/src/Symfony/Component/Security/Core/Authentication/AuthenticationTrustResolver.php#L65
答案 1 :(得分:1)
我认为您应该尝试在access_denied_url
节点上指定不在特定防火墙(security
)上的选项backend
,因为我认为可能是其他防火墙抛出了AccessDenied异常
来源:http://symfony.com/doc/current/reference/configuration/security.html
或者您可以创建AcccessDeniedListener,请参阅此页面以获取教程:http://www.insanevisions.com/articles/view/symfony-2-access-denied-listener