2015-04-07 25 views
0

我有,我希望人們能夠無需登錄或得到一個登錄頁面訪問web服務。該網頁是/webservice/accessSymfony的 - 不斷迫使登錄儘管安全設置

這些是我的安全設置:

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 

我看在Chrome網絡選項卡,雖然,只是後我做一個jQuery POST調用webservice/access頁面。我看到access上來,以302種狀態(發現)。但之後,我得到了login與200 OK消息。

我不明白爲什麼它這樣做。如果我使用RESTCLIENT Firefox擴展將數據發佈到同一頁面,它工作正常。

jQuery的調用是這樣的:

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

任何想法?

+0

你清除緩存? –

+0

我試過了 - 這不是緩存 – b85411

+0

可能是因爲你不能在不使用JSONP的情況下進行跨域AJAX調用,出於安全原因它被同一個源策略禁止。您的請求是否跨域? – Rahul

回答

0

問題時這裏

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

你告訴你的防火牆,所有的道路都可以訪問只有當用戶有ROLE_USER,當然,是不是AUTHTENTICATED_ANONYMOUSLY一個。

Symfony2防火牆規則將按照您寫入的順序完全解析和匹配:^/路徑在^/webservice/之前匹配,因此您永遠無法達到它。

我的解決方案和建議是他們進行切換,或者更好,如果你肯定知道/webservice/路線將永遠不需要身份驗證方法,您也可以在你的規則上面移動它