Symfony-尽管设置了安全设置,但仍继续强制登录


Symfony - keeps forcing login despite security settings

我有一个Web服务,我希望人们能够在不登录或获得登录页面的情况下访问它。那个页面是/webservice/access

这些是我的安全设置:

access_control:
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/_wdt, role: IS_AUTHENTICATED_ANONYMOUSLY } # No need for login
    - { path: ^/users/, role: ROLE_ADMIN }
    - { path: ^/allviewer/, role: ROLE_ADMIN }
    - { path: ^/items/edit/, role: ROLE_ADMIN }
    - { path: ^/, role: ROLE_USER }
    - { path: ^/webservice/, role: IS_AUTHENTICATED_ANONYMOUSLY } # No need for login

不过,就在我对webservice/access页面进行jQueryPOST调用之后,我正在查看Chrome中的网络选项卡。我看到access出现,状态为302(已找到)。但在那之后,我收到了login和200 OK的消息。

我不明白它为什么这么做。如果我使用RESTCLIENT Firefox扩展将数据发布到同一页面,效果会很好。

jQuery调用如下:

var accessData = $.post(postLink, postData, function() { ...

有什么想法吗?

此处出现问题

 - { path: ^/, role: ROLE_USER }
 - { path: ^/webservice/, role: IS_AUTHENTICATED_ANONYMOUSLY } # No need for login

您告诉您的防火墙,只有当用户拥有ROLE_USER(当然不是AUTHTENTICATED_ANONYMOUSLY)时,所有路径才可访问。

Symfony2防火墙规则按照您编写的顺序进行解析和匹配:^/路径在^/webservice/路径之前匹配,因此您永远无法访问它。

我的解决方案和建议是切换它们,或者更好的是,如果您确信/webservice/路由永远不需要身份验证方法,您也可以将其移动到规则的顶部